2.10.2. JSON Web Token (JWT) 認証の構成

elytron サブシステムで token-realm を指定することで、JWT のサポートを有効にできます。

token-realm 内で、属性と jwt トークンバリデーターを指定できます。Elytron は次のチェックを完了します。

  • exp クレームおよび nbf クレームで指定された値の自動有効期限チェック。
  • オプション: 次のいずれかの方法で提供される公開鍵に基づく署名チェック:

    • public-key または certificate 属性を使用
    • 名前付き公開鍵での鍵マップの使用
    • client-ssl-context 属性を使用して、jku クレームで指定された URL からリモート JSON Web キー (JWK) セットを取得します。
  • オプション: JWT をチェックして、iss および aud クレームでサポートされている値のみが含まれていることを確認します。issuer 属性と audience 属性を使用して、これらのチェックを実行できます。

次の例は、セキュリティーレルムとして token-realm を示し、属性として principal-claim を示しています。principal-claim 属性は、elytron がプリンシパルの名前を取得するために使用するクレームの名前を定義します。jwt 要素は、トークンを JWT として検証する必要があることを指定します。

構成された token-realm の例

<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}">
    <jwt issuer="${issuer_name}"
         audience="${audience_name}"
         <public-key="${public_key_in_PEM_format}"/>
 </token-realm>

token-realm のキーマップを定義できます。次に、署名の検証にさまざまなキーペアを使用して、これらのキーペアを簡単にローテーションできます。Elytron はトークンから kid の主張を取得し、検証に対応する公開鍵を使用します。

  • kid クレームが JWT に存在しない場合、token-realmjwtpublic-key 属性で指定された値を使用して署名を検証します。
  • kid クレームが JWT に存在せず、public-key を構成していない場合、token-realm はトークンを無効にします。

token-realm 用に設定されたキーマップの例。

<token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}">
    <jwt issuer="${issuer_name}" audience="${audience_name}">
        <key kid="${key_ID_from_kid_claim}" public-key="${public_key_in_PEM_format}"/>
        <key kid="${another_key_ID_from_kid_claim}" public-key="${public_key_in_PEM_format}"/>
    </jwt>
</token-realm>

手順

  1. keytool を使用して key-store を作成します。

    keytool を使用して key-store を作成する例。

    keytool -genkeypair -alias <alias_name> -keyalg <key_algorithm> -keysize <key_size> -validity <key_validity_in_days> -keystore <key_store_path> -dname <distinguished_name> -keypass <key_password> -storepass  <key_store_password>

    次に、elytron サブシステムに key-store 定義を追加します。

    elytron サブシステムに key-store 定義を追加する例。

    /subsystem=elytron/key-store=<key_store_name>:add(path=<key_store_path> , credential-reference={clear-text=<key_store_password>}, type=<keystore_type>)

  2. elytron サブシステムで token-realm を作成し、token-realm の属性と jwt トークンバリデーターを指定します。

    elytron サブシステムで token-realm を作成する例。

    /subsystem=elytron/token-realm=<token_realm_name>:add(jwt={issuer=[<issuer_name>],audience=[<audience_name>],key-store=<key_store_name>,certificate=<alias_name>},principal-claim=<principal_claim_key>)

次のステップ

関連情報