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

private_key_jwt の要件
以下では、クライアント側と認可サーバー側の両方について詳細を説明します。クライアント
private_key_jwt 方式を使用する場合、クライアントはトークンリクエストに次のパラメーターを含める必要があります。
client_assertion の値は、その JWT ペイロードおよび JWT 署名について、以下の要件を満たす必要があります。JWT の例は「JWT アサーションの生成
」のセクションを参照してください。
ペイロード
JWT アサーションには、以下に挙げる REQUIRED(必須)のクレームを含める必要があります。署名
- JWT アサーションは、非対称暗号の秘密鍵(例: RS256)を用いてデジタル署名されている必要があります。
- この認証方式を使用するクライアントは、認可サーバーがアサーションを検証できるよう、あらかじめ自身の公開鍵を認可サーバーに登録しておく必要があります。
認可サーバー
認可サーバーは、以下に示す仕様に従ってトークンリクエストを処理する必要があります。これらの処理は認可サーバーから 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)
設定
このセクションでは、private_key_jwt 方式を有効化するための設定を説明します。この方式で認証を行うには、Authlete のサービスとそのクライアントの両方を設定する必要があります。サービスの設定
Authlete の管理コンソールにログインし、「サービス設定」>「エンドポイント」>「トークン」に移動します。「サポート可能なクライアント認証方式」セクションで、PRIVATE_KEY_JWT のチェックボックスを有効にします。

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


例
この例では、認可サーバーのトークンエンドポイントにおけるprivate_key_jwt を用いたクライアント認証を示します。
JWT アサーションの生成
トークンリクエストの client_assertion の値として使用する JWT を生成してみましょう。JWT ペイロードの準備
まず、JSON 形式のペイロードを作成し、“payload.json” として保存します。JWK セットの準備
次に、署名と検証のための JWK セットを準備します。ここでは mkjwk.org を使って JWK セットを生成します。
ES256 アルゴリズムを用いて生成したもので、「公開鍵と秘密鍵のペア」を “key_pair.jwk” というファイルに保存しています。
後者の「公開鍵のみ」を Authlete に登録し、「クライアント認証方式」(PRIVATE_KEY_JWT)と Client Assertion Algorithm(ES256)を設定してください。これらは前のセクションで説明したとおりクライアント設定から行えます。
- 「公開鍵と秘密鍵のペア」
- 「公開鍵」(クライアント設定として Authlete に登録するもの)
JWT の生成
ペイロードを含み、秘密鍵で署名した JWT アサーションを生成します。以下の例は authlete-jose library を使った手順です。または mkjose.org のウェブサイトを使って行うこともできます。client_assertion の値となり、クライアントがトークンリクエストを行う際に使用します。
トークンリクエストとレスポンス
クライアントから認可サーバーへのトークンリクエスト
アサーションを持つクライアントが認可サーバーへトークンリクエストを行うとします。(可読性のため折り返しています)認可サーバーから Authlete への API リクエスト
認可サーバーは、リクエストの内容を Authlete の /auth/token に転送します。(可読性のため折り返しています)Authlete から認可サーバーへの API レスポンス
Authlete はリクエストを処理し、次のような API レスポンスを認可サーバーに返します。(可読性のため折り返しています)認可サーバーからクライアントへのトークンレスポンス
認可サーバーは “responseContent” の値を取り出し、トークンレスポンスとしてクライアントに返します(詳細は省略)。関連情報
この記事では、Authlete におけるクライアント認証設定の基本を説明しています。
Authlete は、認可サーバーが有効化できるよう、client_secret_jwt をクライアント認証方式としてサポートしています。この記事では、この方式の概要と Authlete における設定手順を説明します。
この記事では「OAuth 2.0 のクライアント認証」について解説しています。RFC 6749 で説明されているクライアント認証方式に加えて、client assertion と client certificate を利用する方式についても解説しています。