Skip to main content
This page is for Authlete 2.x. For current (3.0) documentation, see this page.

private_key_jwt によるクライアント認証

はじめに

private_key_jwt はクライアント認証方式のひとつです。OpenID Connect Core 1.0, 9. Client Authentication にて定義されています。 トークンリクエストにおいて、クライアントはデジタル署名された JWT 形式のアサーションを生成し、リクエストに含めます。そして認可サーバーは、そのアサーションの署名とペイロードを検証し、クライアント認証を行います。 認可サーバーは、private_key_jwt 方式を用いたクライアント認証の処理を、Authlete に移管することができます。本記事ではこの方式の概要と、Authlete の設定手順について説明します。
 private-key-jwt_ja
本機能は Authlete 2.0 以降でのみ利用可能になります。

private_key_jwt の処理

アサーションとして送信する JWT には署名・ペイロードに関していくつかの要件が定められており、認可サーバー側ではこの検証を行う必要があります。 クライアント側と認可サーバー側に必要となる処理は、それぞれ下記の通りです。

クライアント側の処理

private_key_jwt 方式を用いる場合、クライアントはトークンリクエストに以下のパラメーターを含める必要があります。 client_assertion にはペイロードと署名について以下の要件を満たす JWT を指定します。この JWT の具体例は「JWT アサーションの生成」のセクションをご覧ください。

ペイロード

下記のうち、必須のクレームを含む必要があります。

署名

  • 署名は非対称暗号アルゴリズム  (RS256 など) における秘密鍵を用いて計算すること
  • クライアントは事前に署名検証用の公開鍵を認可サーバーに登録し、認可サーバーがアサーションを検証できるようにしておくこと

認可サーバー側の処理

認可サーバー側では、リクエストを下記仕様に従って適切に処理することになります。ただし認可サーバーはこれらの処理をすべて Authlete に委譲できるため、ここでは詳細は割愛します。

Authlete の設定

本セクションでは private_key_jwt 方式に対応するための設定を説明します。Authlete サービスと、同方式によって認証されるクライアントの、両方の設定が必要です。

Authlete サービスの設定

管理者コンソールから以下のように設定してください。 client-auth-private-key-jwt_1 認可 タブ

クライアントの設定

クライアントアプリ開発者コンソールにアクセスし、以下のように設定してください。 client-auth-private-key-jwt_2 基本情報タブ client-auth-private-key-jwt_3 認可タブ client-auth-private-key-jwt_4 JWK セット タブ

実行例

以下は、認可サーバーのトークンエンドポイントにおいて private_key_jwt によるクライアント認証を行う例です。

JWT アサーションの生成

事前準備として、トークンリクエストに含める client_assertion パラメーターの値 (JWT) を生成します。

JWT ペイロードの準備

まず JSON 形式のペイロードを生成し、ここでは payload.json というファイル名で保存します。

JWK セットの準備

次に署名の生成・検証に必要となる鍵 (JWK セット) を生成します。なお本記事では、生成に mkjwk.org を利用しています。 client-auth-private-key-jwt_5 以下は ES256 を署名アルゴリズムとして利用する場合の秘密鍵・公開鍵の例です。ここでは生成した公開鍵と秘密鍵のペアを “key_pair.jwk” として保存します。
公開鍵(以下の後者のデータ)を、Authlete に、「JWK セットの内容」として登録するのを忘れないようにしてください。また、クライアント認証方式 (PRIVATE_KEY_JWT) およびアサーション署名アルゴリズム (ES256) についても設定が必要です。これらは前節にて示した通り、クライアントアプリ開発者コンソールから設定できます。
  • 公開鍵と秘密鍵のペア
  • 公開鍵(クライアントアプリ開発者コンソールを用いて Authlete に登録)

JWT の生成

前述のペイロードを含み、かつ上記の秘密鍵により署名された JWT を生成します。以下は authlete-jose ライブラリ を利用して JWT を生成する例ですが、mkjose.org サービスなどの他の方法を利用してもかまいません。
結果的に以下のような JWT が得られます。(見やすさを考慮し一部改行してあります。)
この JWT が、クライアントがトークンリクエストの際に用いる client_assertion の値となります。

トークンリクエストの実行

クライアントから認可サーバーへのトークンリクエスト

上記のアサーションを持つクライアントが、認可サーバーに対して以下のトークンリクエストを送信したと仮定します。(見やすさを考慮し一部改行してあります)

認可サーバーから Authlete への API リクエスト

認可サーバーは、 Authlete の /auth/token API に、このリクエストの内容を転送します。(見やすさを考慮し一部改行してあります)

Authlete から認可サーバーへの API レスポンス

Authlete は上記リクエストを処理し、API レスポンスとして、認可サーバーに以下を返却します。(見やすさを考慮し一部改行してあります)

認可サーバーからクライアントへのトークンレスポンス

認可サーバーは “responseContent” から抽出した値を、トークンレスポンスとしてクライアントに返却します。(詳細は割愛)

関連情報

本記事では、Authlete のクライアント認証設定の基本を説明します。
認可サーバーは、client_secret_jwt 方式を用いたクライアント認証の処理を、Authlete に移管することができます。本記事ではこの方式の概要と、Authlete の設定手順について説明します。
この記事では、OAuth 2.0 の『クライアント認証』について説明します。RFC 6749 に記述されているクライアント認証方式のほか、クライアントアサーションやクライアント証明書を用いるクライアント認証方式についても説明します。