For Authlete 2.x documentation, see 2.x version.
はじめに
client_secret_jwt は、OpenID Connect Core 1.0, 9. Client Authentication で定義されているクライアント認証方式の一つです。 トークンリクエストの際、クライアントは署名部にメッセージ認証コード(MAC)を含む JWT アサーションを生成し、これをリクエストに含めます。認可サーバーは、そのアサーションの署名とペイロードを検証することでクライアントを認証します。 Authlete は、認可サーバーがclient_secret_jwt クライアント認証方式をサポートするための機能を提供しています。本記事では、この方式の概要と Authlete における設定手順を説明します。

client_secret_jwt の要件
以下では、クライアント側と認可サーバー側の双方について詳細を説明します。クライアント
クライアントは、client_secret_jwt 方式を使用する際、トークンリクエストに以下のパラメーターを含める必要があります。
client_assertion の値は、その JWT ペイロードと JWT 署名について以下の要件を満たす必要があります。JWT の例は「JWT アサーションの生成」のセクションで確認できます。
ペイロード
JWT アサーションには、以下に示す必須(REQUIRED)のクレームを含める必要があります。署名
- JWT の署名は HMAC-SHA アルゴリズム(例: HS256)を用いて計算する必要があります。
- 署名の計算には、共有鍵としてクライアントシークレットを使用する必要があります。
認可サーバー
認可サーバーは、以下に示す仕様に従ってトークンリクエストを処理する必要があります。これらの処理は認可サーバーから Authlete にオフロードできるため、ここでは詳細を省略します。- JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants (RFC7523)
- Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants (RFC7521)
設定
このセクションでは、client_secret_jwt 方式を有効化するための設定を説明します。本方式でクライアントを認証するには、Authlete サービスとそのクライアントの両方を設定する必要があります。サービスの設定
Authlete 管理コンソールで以下の設定を行います。
Authlete のサービス設定を行うには、以下の手順を実施します。
- Authlete 管理コンソール にログインします。
- 組織名をクリックし、対象のサービスを選択します。
- 「サービス設定」>「エンドポイント」>「トークン」に移動します。
- 「サポート可能なクライアント認証方式」セクションで、
CLIENT_SECRET_JWTのチェックボックスを選択します。 - 「変更を保存」をクリックしてサービス設定を更新します。

クライアントの設定
Authlete 管理コンソールで以下の設定を行います。
基本設定を行います。
- 「クライアント設定」>「基本設定」>「一般」に移動します。
- 「クライアントタイプ」で「機密」(CONFIDENTIAL)のラジオボタンを選択します。
- 「変更を保存」をクリックして更新を適用します。

- 「クライアント設定」>「エンドポイント」>「トークン」>「一般」に移動します。
- 「クライアント認証方式」セクションでドロップダウンメニューを開き、
CLIENT_SECRET_JWTを選択します。 - 「アサーション署名アルゴリズム」セクションでドロップダウンメニューを開き、
HS256を選択します。 - 「変更を保存」をクリックして更新を適用します。

例
この例では、認可サーバーのトークンエンドポイントにおけるクライアント認証にclient_secret_jwt 方式を使用する方法を示します。
JWT アサーションの生成
トークンリクエストの client_assertion の値として使用する JWT を生成します。JWT ペイロードの準備
まず、JSON 形式のペイロードを作成し、“payload.json” として保存します。JWT の生成
ペイロードと、クライアントの共有鍵(クライアントシークレット)を用いた MAC を含む JWT アサーションを生成します。以下の例は authlete-jose ライブラリ を使用した手順です。あるいは mkjose.org のウェブサイトを利用しても生成できます。client_assertion の値となり、クライアントはトークンリクエストの際にこれを含めます。
トークンリクエストとレスポンス
クライアントから認可サーバーへのトークンリクエスト
アサーションを持つクライアントが認可サーバーへトークンリクエストを行うとします。(可読性のため折り返しています)認可サーバーから Authlete への API リクエスト
認可サーバーは、リクエストの内容を Authlete の /auth/token API に転送します。トークンリクエスト内の<Service ID> が、ご自身の Authlete サービス ID と一致していることを確認してください。(可読性のため折り返しています)
Authlete から認可サーバーへの API レスポンス
Authlete はリクエストを処理し、以下のような API レスポンスを認可サーバーに返します。(可読性のため折り返しています)認可サーバーからクライアントへのトークンレスポンス
認可サーバーは “responseContent” の値を取り出し、トークンレスポンスとしてクライアントに返します(詳細は省略します)。関連情報
Authlete におけるクライアント認証設定の基本について説明しています。
Authlete はクライアント認証方式として client_secret_jwt をサポートしており、認可サーバーはこれを有効化できます。本記事では、本方式の概要と Authlete での設定手順を説明します。
「OAuth 2.0 client authentication」について解説しています。RFC 6749 に記載されたクライアント認証方式に加え、client assertion と client certificate を利用する方式について説明しています。