Skip to main content
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_secret_jwt 方式を使用する際、トークンリクエストに以下のパラメーターを含める必要があります。 client_assertion の値は、その JWT ペイロードと JWT 署名について以下の要件を満たす必要があります。JWT の例は「JWT アサーションの生成」のセクションで確認できます。

ペイロード

JWT アサーションには、以下に示す必須(REQUIRED)のクレームを含める必要があります。

署名

  • JWT の署名は HMAC-SHA アルゴリズム(例: HS256)を用いて計算する必要があります。
  • 署名の計算には、共有鍵としてクライアントシークレットを使用する必要があります。

認可サーバー

認可サーバーは、以下に示す仕様に従ってトークンリクエストを処理する必要があります。これらの処理は認可サーバーから Authlete にオフロードできるため、ここでは詳細を省略します。

設定

このセクションでは、client_secret_jwt 方式を有効化するための設定を説明します。本方式でクライアントを認証するには、Authlete サービスとそのクライアントの両方を設定する必要があります。

サービスの設定

Authlete 管理コンソールで以下の設定を行います。 Authlete のサービス設定を行うには、以下の手順を実施します。
  1. Authlete 管理コンソール にログインします。
  2. 組織名をクリックし、対象のサービスを選択します。
  3. 「サービス設定」>「エンドポイント」>「トークン」に移動します。
  4. 「サポート可能なクライアント認証方式」セクションで、CLIENT_SECRET_JWT のチェックボックスを選択します。
  5. 「変更を保存」をクリックしてサービス設定を更新します。
client_secret_jwt のサービス設定

クライアントの設定

Authlete 管理コンソールで以下の設定を行います。 基本設定を行います。
  1. 「クライアント設定」>「基本設定」>「一般」に移動します。
  2. 「クライアントタイプ」で「機密」(CONFIDENTIAL)のラジオボタンを選択します。
  3. 「変更を保存」をクリックして更新を適用します。
client_secret_jwt のクライアント基本設定 エンドポイントの設定を行います。
  1. 「クライアント設定」>「エンドポイント」>「トークン」>「一般」に移動します。
  2. 「クライアント認証方式」セクションでドロップダウンメニューを開き、CLIENT_SECRET_JWT を選択します。
  3. 「アサーション署名アルゴリズム」セクションでドロップダウンメニューを開き、HS256 を選択します。
  4. 「変更を保存」をクリックして更新を適用します。
client_secret_jwt のクライアントエンドポイント設定

この例では、認可サーバーのトークンエンドポイントにおけるクライアント認証に client_secret_jwt 方式を使用する方法を示します。

JWT アサーションの生成

トークンリクエストの client_assertion の値として使用する JWT を生成します。

JWT ペイロードの準備

まず、JSON 形式のペイロードを作成し、“payload.json” として保存します。

JWT の生成

ペイロードと、クライアントの共有鍵(クライアントシークレット)を用いた MAC を含む JWT アサーションを生成します。以下の例は authlete-jose ライブラリ を使用した手順です。あるいは mkjose.org のウェブサイトを利用しても生成できます。
生成される JWT は次のようになります(改行は表示用のものです)。
この JWT が 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 を利用する方式について説明しています。