6.4. オフラインアクセス
オフラインアクセス ログイン時に、クライアントアプリケーションはリフレッシュトークンではなくオフライントークンを要求します。クライアントアプリケーションは、このオフライントークンを保存し、ユーザーがログアウトした場合に今後のログインに使用できます。このアクションは、ユーザーがオンラインにない場合でも、アプリケーションがユーザーの代わりにオフライン操作を実行する必要がある場合に便利です。たとえば、通常のデータバックアップです。
クライアントアプリケーションは、ストレージでオフライントークンを永続化し、これを使用して Red Hat build of Keycloak サーバーから新しいアクセストークンを取得します。
リフレッシュトークンとオフライントークンの違いは、オフライントークンは有効期限がなく、SSO Session Idle タイムアウトや SSO Session Max の有効期間の影響を受けない点です。オフライントークンは、ユーザーがログアウトした後も有効です。オフライントークンは、少なくとも 30 日ごとに 1 回リフレッシュトークンアクションに使用するか、Offline Session Idle の値に使用する必要があります。
Offline Session Max Limited を有効にすると、リフレッシュトークンアクションにオフライントークンを使用していても、オフライントークンは 60 日後に期限切れになります。管理コンソールの Offline Session Max の値を変更できます。
オフラインアクセスを使用する場合、クライアントのアイドルタイムアウトと最大タイムアウトは クライアントレベル でオーバーライドできます。クライアントの Advanced Settings タブにある Client Offline Session Idle オプションと Client Offline Session Max オプションを使用すると、特定のアプリケーションのオフラインタイムアウトを短くすることができます。クライアントセッションの値はリフレッシュトークンの有効期限も制御しますが、グローバルなオフラインユーザー SSO セッションに影響を与えることはありません。Client Offline Session Max オプションは、レルムレベルで Offline Session Max Limited が Enabled の場合にのみ、クライアントで評価されます。
Revoke Refresh Token オプションを有効にすると、各オフライントークンを 1 回だけ使用できます。更新後、前の 1 つではなく、更新応答から新しいオフライントークンを保存する必要があります。
ユーザーは、Red Hat build of Keycloak が付与したオフライントークンを ユーザーのアカウントコンソール で表示および取り消すことができます。管理者は、Consents タブで管理コンソールの個々のユーザーのオフライントークンを取り消すことができます。管理者は、各クライアントの Offline Access タブで発行されたオフライントークンすべてを表示できます。管理者は、失効ポリシー を設定してオフライントークンを取り消すことができます。
オフライントークンを発行するには、ユーザーは realm-level offline_access ロールのロールマッピングが必要です。クライアントには、そのロールをスコープで割り当てる必要もあります。クライアントは、offline_access クライアントスコープを Optional client scope としてロールに追加し、デフォルトでは実行する必要があります。
クライアントは、認可要求を Red Hat build of Keycloak に送信するときに scope=offline_access パラメーターを追加することで、オフライントークンを要求できます。Red Hat build of Keycloak OIDC クライアントアダプターは、アプリケーションのセキュアな URL (例: http://localhost:8080/customer-portal/secured?scope=offline_access) にアクセスするために使用すると、このパラメーターを自動的に追加します。認証要求の本文に scope=offline_access が含まれている場合、Direct Access Grant および Service Accounts はオフライントークンをサポートします。
Red Hat build of Keycloak は、オフラインユーザーおよびオフラインクライアントセッションの内部キャッシュをデフォルトで 10000 エントリーに制限します。これにより、オフラインセッションの全体的なメモリー使用量が削減されます。メモリーから退避されたアイテムは、必要に応じてデータベースからオンデマンドでロードされます。このデフォルト設定を変更するには、「サーバー設定ガイド」を参照してください。