Documentation Index
Fetch the complete documentation index at: https://developers.authlete.com/llms.txt
Use this file to discover all available pages before exploring further.
このページは Authlete 2.x 向けのドキュメントです。3.0 の内容はRFC 8693 OAuth 2.0 Token Exchange(3.0)をご覧ください。
はじめに
RFC 8693 OAuth 2.0 Token Exchange (以下 “Token Exchange”) は、トークンエンドポイントに既存のトークンを提示して新しいトークンを取得する方法を定義している技術仕様です。 当仕様はとても柔軟ですが、安全なトークン交換に必要となる詳細事項については定義されていません。そのため、同仕様を認可サーバーに実装する際には、未定義部分に関する詳細仕様化が必要です。 本記事では、Token Exchange 仕様を用いる場合の詳細仕様化の要点と、Authlete 2.x における同仕様のサポートについて説明します。仕様
次の図はトークン交換フローを示しています。
トークンの種別
トークン交換フローにおいて入力として提示するトークンには、サブジェクトトークン (Subject Token) と アクタートークン (Actor Token) の 2 種類があります。- サブジェクトトークン: 必須。リクエストの当事者のアイデンティティを表す。
- アクタートークン: 任意。代行者のアイデンティティを表す。
トークンタイプ
仕様は次のトークンタイプ識別子を定義しています。| トークンタイプ | トークンタイプ識別子 |
|---|---|
| JWT | urn:ietf:params:oauth:token-type:jwt |
| アクセストークン | urn:ietf:params:oauth:token-type:access_token |
| リフレッシュトークン | urn:ietf:params:oauth:token-type:refresh_token |
| ID トークン | urn:ietf:params:oauth:token-type:id_token |
| SAML 1.1 / 2.0 | urn:ietf:params:oauth:token-type:saml1 / saml2 |
トークン交換リクエスト
- グラントタイプ:
urn:ietf:params:oauth:grant-type:token-exchangeをgrant_typeに指定。 - 主なパラメーター:
subject_token,subject_token_type(必須)、actor_token,actor_token_type(任意)、resource,audience,scope,requested_token_type(任意)。
トークン交換レスポンス
access_token,issued_token_type,token_typeが必須。expires_in,scope,refresh_tokenは任意。
Authlete 2.x における対応
Token Exchange は Authlete 2.3 以降でサポートされます。- トークンリクエストを
/auth/tokenAPI に送信すると、grant_typeがurn:ietf:params:oauth:grant-type:token-exchangeでバリデーションをパスした場合、actionとしてTOKEN_EXCHANGEが返却されます。 - トークン交換レスポンスの生成には
/auth/token/createAPI を用い、grantTypeにTOKEN_EXCHANGEを指定します。
トークンのバリデーション
Authlete はsubject_token / actor_token のトークンタイプに応じてバリデーションを行います(JWT・アクセストークン・リフレッシュトークン・ID トークン・SAML など)。詳細は Authlete ウェブサイトの Token Exchange ページ(2.x) を参照してください。
関連する設定項目(2.x)
- サービス設定: 特定可能なクライアントのみ、コンフィデンシャルクライアントのみ、許可されたクライアントのみ、暗号化/無署名 JWT の拒否など。
- クライアント拡張:
tokenExchangePermittedでトークン交換を明示的に許可。
利用例
トークン交換の実装例は authlete-java-jaxrs のTokenRequestHandler.java および java-oauth-server の TokenExchanger.java を参照してください。