16.16. 認証セッションの制限

Web ブラウザーで初めてログインページを開くと、Red Hat Single Sign-On は、認証セッションと呼ばれるオブジェクトを作成し、そこに要求に関する有用な情報を保存します。同じブラウザーの別のタブから新しいログインページが開かれるたびに、Red Hat Single Sign-On は、認証セッション内に保存される認証サブセッションと呼ばれる新しいレコードを作成します。認証要求は、管理 CLI などの任意のタイプのクライアントから取得できます。この場合、認証サブセッションが 1 つ含まれる、新しい認証セッションが作成されます。認証セッションは、ブラウザーフローを使用する以外の方法でも作成できます。以下のテキストは、ソースフローに関係なく適用されます。

注記

本セクションでは、認証セッションに RHDG プロバイダーを使用するデプロイメントについて説明します。

認証セッションは、rootAuthenticationSessionEntity として内部に保存されます。各 RootAuthenticationSessionEntity は、AuthenticationSessionEntity オブジェクトのコレクションとして RootAuthenticationSessionEntity 内に保存された複数の認証サブセッションを含めることができます。Red Hat Single Sign-On は、認証セッションを専用の RHDG キャッシュに保存します。RootAuthenticationSessionEntity ごとの AuthenticationSessionEntity の数は、各キャッシュエントリーのサイズに影響します。認証セッションキャッシュの合計メモリーフットプリントは、保存された RootAuthenticationSessionEntity の数と各 RootAuthenticationSessionEntity 内の AuthenticationSessionEntity の数によって決まります。

維持される RootAuthenticationSessionEntity オブジェクトの数は、ブラウザーから未完了のログインフローの数に対応します。RootAuthenticationSessionEntity 数のコントロールを保持するには、高度なファイアウォール制御を使用して Ingress ネットワークトラフィックを制限することを推奨します。

AuthenticationSessionEntity が多数含まれる、アクティブな RootAuthenticationSessionEntity が多いデプロイメントでは、メモリー使用量が高くなる場合があります。ロードバランサーが セッションのスティッキネス をサポートしていないか、それ用に設定されていない場合には、クラスターのネットワーク上の負荷が増大する可能性があります。この負荷の理由は、適切な認証セッションを所有していないノードに到達する各要求は、所有者ノードの認証セッションレコードを取得および更新する必要があるためです。これには、取得と保存の両方に個別のネットワーク送信が含まれます。

RootAuthenticationSessionEntity ごとの AuthenticationSessionEntity の最大数は、プロパティー authSessionsLimit を指定して、authenticationSessionsSPI で設定できます。デフォルト値は、 RootAuthenticationSessionEntity ごとに 300AuthenticationSessionEntity に設定されています。この制限に達すると、新しい認証セッション要求後に、最も古い認証サブセッションが削除されます。

次の例は、 RootAuthenticationSessionEntity ごとのアクティブな AuthenticationSessionEntity の数を 100 に制限する方法を示しています。

<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
    ...
    <spi name="authenticationSessions">
        <default-provider>infinispan</default-provider>
        <provider name="infinispan" enabled="true">
            <properties>
                <property name="authSessionsLimit" value="100"/>
            </properties>
        </provider>
    </spi>
    ...
</subsystem>

CLI コマンドを使用した同等の設定:

/subsystem=keycloak-server/spi=authenticationSessions:add(default-provider=infinispan)
/subsystem=keycloak-server/spi=authenticationSessions/provider=infinispan:add(properties={authSessionsLimit => "100"},enabled=true)