シングル・サインオン Cookie としての JSON Web Token の構成

jwtSso-1.0 フィーチャーを使用すると、Liberty サーバーを構成して JSON Web Token (JWT) をシングル・サインオン (SSO) Cookie として使用します。 オプションで、 フィーチャーの動作をカスタマイズし、JWT の作成方法を変更できます。

このタスクについて

JWT SSO Cookie は、jwtSso-1.0 フィーチャーを使用可能にすることで構成されます。 ユーザーが認証されると、 Liberty は署名付き JWT を SSO Cookie として作成し、ブラウザーに返します。 その後、ブラウザーは、 Liberty サーバーへの後続の要求に JWT Cookie を組み込むことができます。

重要: JWT Cookie には、認証されたユーザーおよびグループに関する情報が含まれています。 コンテンツは署名されていますが暗号化されていません。 ユーザーとグループ ID の公開を避けるには、 このフィーチャーを使用して保護された (HTTPS) 通信を使用します。

JWT は RS256 署名方式を使用したサーバーの秘密鍵を使用して署名され、 120 分の存続期間があります。

JWT SSO Cookie をカスタマイズできます。 JWT Cookie のカスタマイズについて詳しくは、 jwtSso フィーチャーを参照してください。

手順

  1. フィーチャー・マニフェストに jwtSso-1.0 フィーチャーを追加します。
     
    <featureManager>                                                            
    <feature>jwtSso-1.0</feature>
    ...     
    </featureManager>
    
  2. オプション: server.xml ファイル内の jwtSso エレメントを構成することにより、サンプル内のサンプル値を実際の値に置き換えて、フィーチャーの動作をカスタマイズします。
    <jwtSso cookieName="myjwt" jwtBuilderRef="myBuilder"/>
  3. オプション: jwtBuilderRef 属性を構成して、JWT の作成方法を変更します。
    jwtBuilderRef 属性は、サーバー構成内に存在する必要がある jwtBuilder エレメントを参照します。 jwtBuilder 構成は JWT の作成方法を制御します。 例えば、expiresInSeconds 属性を構成してトークンの有効期限を変更することができます。   
    <jwtBuilder id="myBuilder" expiresInSeconds="1800"/>
    keyStoreRef 属性および keyAlias 属性を以下のように編集して、 JWT 署名鍵を変更します。
    <jwtBuilder id="myBuilder" keyStoreRef="mykeyStore" 
            keyAlias="myJwtSigner"/>

    複数のサーバーが JWT Cookie を実行して共有する場合、署名鍵を指定す る機能は重要です。 各サーバーは、異なるサーバーで発生する可能性のある Cookie を検証できる必要があります。

    発行者の属性を指定して JWT 発行者を変更します。 デフォルトでは、発行者は https://<hostname>:<port>/jwt/defaultJwtSso です。 次に例を挙げます。
    <jwtBuilder id="myBuilder" issuer="http://server.example.com" />

    構成可能な jwtBuilder 属性について詳しくは、 JWT Builderを参照してください。

  4. オプション: mpJwt エレメントを server.xml ファイルに追加して、JWT 検証基準を変更します。

    jwtSso フィーチャーが存在する場合は、自動的に mpJwt エレメントを使用します。 server.xml ファイルに存在できる mpJwt エレメントは 1 つだけです。 次の例では、jwtBuilder 参照を使用してトークンの作成をカスタマイズし、 mpJwt エレメントを使用してトークンの検証と消費をカスタマイズします。

    <jwtSso includeLtpaCookie="true" jwtBuilderRef="myBuilder">            
    <jwtBuilder id="myBuilder" issuer="http://server.example.com" />       
    <mpJwt id="myMpJwt" issuer="http://server.example.com"                  
    keyName="myJwtSigner"/>

    構成可能な mpJwt 属性について詳しくは、 MicroProfile JWTを参照してください。

  5. オプション: JSON Web Key (JWK) エンドポイントを使用して JWT を検証します。

    Liberty が JWT を作成すると、発行者がそれらに署名します。 発行者の公開鍵を使用するコンシューマーは、 後で署名を検証します。 複数のサーバーを使用する場合は、コンシューマーのトラストス トア・ファイルで発行者の公開鍵を保管する必要があります。 トラストストア・ファイルで発行者の公開鍵を保管する便利な代替方法とし て、発行者の JWK エンドポイントから公開鍵を取得することができます。

    デフォルトの JWK エンドポイントは http(s)://<host>:<port>/jwt/ibm/api/defaultJWT/jwk です。

    JWT をコンシュームするために JWK エンドポイントを使用するには、 jwksUri 属性を mpJwt 構成エレメントに追加します。
    <mpJwt id="myMpJwt" jwksUri="https://localhost:19443/jwt/ibm/api/defaultJWT/jwk" />
    別のビルダーを指定した場合、その JWK エンドポイントは http(s)://<host>:<port>/jwt/ibm/api/(builderId)/jwk です。 例えば、以下の jwtSso エレメントには、http(s)://<host>:<port>/jwt/ibm/api/myBuilder/jwk という JWK エンドポイントがあります。
    <jwtSso jwtBuilderRef="myBuilder"/> <jwtBuilder id="myBuilder" />