diff --git a/keycloak/justfile b/keycloak/justfile index 7ba8345..ba4bc43 100644 --- a/keycloak/justfile +++ b/keycloak/justfile @@ -155,7 +155,7 @@ delete-realm realm: dotenvx run -q -f ../.env.local -- tsx ./scripts/delete-realm.ts # Create Keycloak client -create-client realm client_id redirect_url client_secret='': +create-client realm client_id redirect_url client_secret='' session_idle='' session_max='': #!/bin/bash set -euo pipefail export KEYCLOAK_ADMIN_USER=$(just admin-username) @@ -164,6 +164,8 @@ create-client realm client_id redirect_url client_secret='': export KEYCLOAK_CLIENT_ID={{ client_id }} export KEYCLOAK_CLIENT_SECRET={{ client_secret }} export KEYCLOAK_REDIRECT_URL={{ redirect_url }} + export KEYCLOAK_CLIENT_SESSION_IDLE={{ session_idle }} + export KEYCLOAK_CLIENT_SESSION_MAX={{ session_max }} dotenvx run -q -f ../.env.local -- tsx ./scripts/create-client.ts # Delete Keycloak client diff --git a/keycloak/scripts/create-client.ts b/keycloak/scripts/create-client.ts index faa0e91..40dffa7 100644 --- a/keycloak/scripts/create-client.ts +++ b/keycloak/scripts/create-client.ts @@ -24,6 +24,9 @@ const main = async () => { const redirectUris = redirectUrl.split(',').map(url => url.trim()); + const sessionIdle = process.env.KEYCLOAK_CLIENT_SESSION_IDLE; + const sessionMax = process.env.KEYCLOAK_CLIENT_SESSION_MAX; + const kcAdminClient = new KcAdminClient({ baseUrl: `https://${keycloakHost}`, realmName: "master", @@ -46,13 +49,28 @@ const main = async () => { return; } - const createdClient = await kcAdminClient.clients.create({ + const clientConfig: any = { clientId: clientId, secret: clientSecret, enabled: true, redirectUris: redirectUris, publicClient: clientSecret && clientSecret !== '' ? false : true, - }); + }; + + // Add session timeout settings if provided + if (sessionIdle && sessionIdle !== '') { + clientConfig.attributes = clientConfig.attributes || {}; + clientConfig.attributes['client.session.idle.timeout'] = sessionIdle; + console.log(`Setting Client Session Idle Timeout: ${sessionIdle}`); + } + + if (sessionMax && sessionMax !== '') { + clientConfig.attributes = clientConfig.attributes || {}; + clientConfig.attributes['client.session.max.lifespan'] = sessionMax; + console.log(`Setting Client Session Max Lifespan: ${sessionMax}`); + } + + const createdClient = await kcAdminClient.clients.create(clientConfig); console.log(`Client created successfully with ID: ${createdClient.id}`); } catch (error) { console.error("An error occurred:", error);