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
関連情報
- JWT 検証の詳細は、JSON Web Tokens (JWT)認証の設定 を参照してください。
- OAuth2 検証の詳細は、OAuth2 準拠の承認サーバーによって発行されたトークンを使用した認証の設定 を参照してください。
-
token-realmで使用できる属性の詳細は、サーバーのセキュリティーの設定方法 ガイドの 表 A.93.token-realm属性 を参照してください。
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-realmはjwtのpublic-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>
手順
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>)
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>)
次のステップ
- アプリケーションの認証を設定するには、アプリケーションの認証の設定 を参照してください。
関連情報
-
token-realmjwt属性の詳細は、サーバーのセキュリティーの設定方法 の 表 A.94. token-realm jwt 属性 を参照してください。
2.10.3. OAuth2 準拠の承認サーバーによって発行されたトークンを使用した認証の設定
Elytron は、OAuth2 準拠の認証サーバーによって発行されたベアラートークンをサポートします。事前定義された oauth2-introspection エンドポイントに対してトークンを検証するようにトークンレルムを設定できます。
手順
トークンレルムを作成します。
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>
次のステップ
- アプリケーションの認証を設定するには、アプリケーションの認証の設定 を参照してください。
関連情報
-
トークンイントロスペクションエンドポイントの詳細は、表 A.95
token-realmoauth2-introspectionAttributes を参照してください。
2.10.4. アプリケーションのベアラートークン認証の設定
Open ID Connect ID トークンなどの JWT 形式のベアラートークンを使用するか、OAuth2 準拠の承認サーバーによって発行された不透明なトークンを使用して、アプリケーションの認証を設定できます。
前提条件
必要な認証方法に応じて、次のいずれかの手順を実行して
token-realmを作成します。
手順
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>)
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>}]}])
undertowサブシステムでapplication-security-domainを設定します。undertowサブシステムでapplication-security-domainを設定する例。/subsystem=undertow/application-security-domain=<application_security_domain_name>:add(http-authentication-factory=<authentication_factory_name>)
-
アプリケーションの
web.xmlおよびjboss-web.xmlファイルを設定します。アプリケーションのweb.xmlでBEARER_TOKEN認証方式が指定されていることを確認する必要があります。さらに、jboss-web.xmlが JBoss EAP で設定したapplication-security-domainを使用していることを確認します。
関連情報
-
BEARER_TOKEN認証メカニズムの詳細については、ベアラートークン認証 を参照してください。 -
token-realmjwt属性の詳細は、サーバーのセキュリティーの設定方法 の 表 A.94. token-realm jwt 属性 を参照してください。 -
OAuth2 トークンエンドポイントで使用できる属性の詳細は、表 A.95
token-realmoauth2-introspectionAttributes を参照してください。 -
アプリケーションの
web.xmlおよびjboss-web.xml設定の詳細については、アイデンティティー管理の設定方法 ガイドの 認証に Elytron またはレガシーセキュリティーを使用するよう Web アプリケーションを設定する手順 を参照してください。