2.10. ベアラートークンを使用して認証と承認の設定

2.10.1. ベアラートークン認証

BEARER_TOKEN 認証メカニズムを使用して、アプリケーションに送信される HTTP リクエストを承認できます。Web ブラウザーなどのクライアントが HTTP 要求をアプリケーションに送信した後、BEARER_TOKEN メカニズムは、要求の Authorization HTTP ヘッダーにベアラートークンが存在することを確認します。

Elytron は、OpenID Connect ID トークンなどの JWT 形式のベアラートークンを使用するか、OAuth2 準拠の承認サーバーによって発行された不透明なトークンを使用することで認証をサポートします。関連情報のセクションを参照してください。

次の例は、Authorization HTTP ヘッダーに mF_9.B5f-4.1JqM ベアラートークンが含まれていることを示しています。

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

BEARER_TOKEN メカニズムは、ベアラトークン文字列を抽出し、検証のために token-realm 実装に渡すことができるようになりました。実装がベアラートークンの検証に成功すると、Elytron はトークンによって表される情報に基づいてセキュリティーコンテキストを作成します。アプリケーションは、このセキュリティーコンテキストを使用して、リクエスターに関する情報を取得できます。次に、リクエスターに HTTP リソースへのアクセスを提供することにより、リクエストを実行するかどうかを決定できます。

リクエスターがベアラートークンを提供しない場合、BEARER_TOKEN メカニズムは 401 HTTP ステータスコードを返します。以下に例を示します。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"

リクエスターがリソースへのアクセスを許可されていない場合、BEARER_TOKEN メカニズムは 403 HTTP ステータスコードを返します。

HTTP/1.1 403 Forbidden

関連情報

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>)

次のステップ

関連情報

2.10.3. OAuth2 準拠の承認サーバーによって発行されたトークンを使用した認証の設定

Elytron は、OAuth2 準拠の認証サーバーによって発行されたベアラートークンをサポートします。事前定義された oauth2-introspection エンドポイントに対してトークンを検証するようにトークンレルムを設定できます。

手順

  1. トークンレルムを作成します。

    elytron サブシステムを使用してトークンレルムを作成する例:

    /subsystem=elytron/token-realm=<token_realm_name>:add(principal-claim=<principal_claim_key>, oauth2-introspection={client-id=<client_id>, client-secret=<client_secret>, introspection-url=<introspection_URL>})

    次の例は、token-realm 要素で指定された oauth2-introspection 要素を示しています。このトークンレルムは、事前定義された oauth2-introspection エンドポイントに対してトークンを検証するように設定されています。oauth2-introspection エンドポイントは、client-id 属性と client-secret 属性で指定された値を使用して、クライアントを識別します。

    token-realm 要素内の oauth2-introspection 要素の例:

    <token-realm name="${token_realm_name}" principal-claim="${principal_claim_key}">
        <oauth2-introspection client-id="${client_id}"
                              client-secret="${client_secret}"
                              introspection-url="${introspection_URL}"
                              host-name-verification-policy="${hostname_verification_policy_value}"/>
    </token-realm>

次のステップ

関連情報

2.10.4. アプリケーションのベアラートークン認証の設定

Open ID Connect ID トークンなどの JWT 形式のベアラートークンを使用するか、OAuth2 準拠の承認サーバーによって発行された不透明なトークンを使用して、アプリケーションの認証を設定できます。

前提条件

手順

  1. elytron サブシステムにセキュリティードメインを作成します。セキュリティードメインでトークンセキュリティーレルムを指定していることを確認してください。

    elytron サブシステムにセキュリティードメインを作成する例。

    /subsystem=elytron/security-domain=<security_domain_name>:add(realms=[{realm=<token_realm_name>,role-decoder=<role_decoder_name>}],permission-mapper=<permission_mapper_name>,default-realm=<token_realm_name>)

  2. BEARER_TOKEN メカニズムを使用する http-authentication-factory を作成します。

    http-authentication-factory の作成例。

    /subsystem=elytron/http-authentication-factory=<authentication_factory_name>:add(security-domain=<security_domain_name>,http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=BEARER_TOKEN,mechanism-realm-configurations=[{realm-name=<token_realm_name>}]}])

  3. undertow サブシステムで application-security-domain を設定します。

    undertow サブシステムで application-security-domain を設定する例。

    /subsystem=undertow/application-security-domain=<application_security_domain_name>:add(http-authentication-factory=<authentication_factory_name>)

  4. アプリケーションの web.xml および jboss-web.xml ファイルを設定します。アプリケーションの web.xmlBEARER_TOKEN 認証方式が指定されていることを確認する必要があります。さらに、jboss-web.xml が JBoss EAP で設定した application-security-domain を使用していることを確認します。

関連情報