メインコンテンツへスキップ

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

トークンタイプ

仕様は次のトークンタイプ識別子を定義しています。
トークンタイプトークンタイプ識別子
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 を参照してください。