Skip to main content
このページは 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 種類があります。
  • サブジェクトトークン: 必須。リクエストの当事者のアイデンティティを表す。
  • アクタートークン: 任意。代行者のアイデンティティを表す。

トークンタイプ

仕様は次のトークンタイプ識別子を定義しています。
トークンタイプトークンタイプ識別子
JWTurn: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.0urn:ietf:params:oauth:token-type:saml1 / saml2

トークン交換リクエスト

  • グラントタイプ: urn:ietf:params:oauth:grant-type:token-exchangegrant_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/token API に送信すると、grant_typeurn:ietf:params:oauth:grant-type:token-exchange でバリデーションをパスした場合、action として TOKEN_EXCHANGE が返却されます。
  • トークン交換レスポンスの生成には /auth/token/create API を用い、grantTypeTOKEN_EXCHANGE を指定します。

トークンのバリデーション

Authlete は subject_token / actor_token のトークンタイプに応じてバリデーションを行います(JWT・アクセストークン・リフレッシュトークン・ID トークン・SAML など)。詳細は Authlete ウェブサイトの Token Exchange ページ(2.x) を参照してください。

関連する設定項目(2.x)

  • サービス設定: 特定可能なクライアントのみ、コンフィデンシャルクライアントのみ、許可されたクライアントのみ、暗号化/無署名 JWT の拒否など。
  • クライアント拡張: tokenExchangePermitted でトークン交換を明示的に許可。

利用例

トークン交換の実装例は authlete-java-jaxrsTokenRequestHandler.java および java-oauth-serverTokenExchanger.java を参照してください。