JSON Web Tokens (JWTs)
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

クライアントシークレット JWT

Liferay は、OAuth 2 クライアントの認証方法としてクライアント シークレット JWT をサポートしています。 このフローでは、クライアント自体がアサーションを作成し、クライアント シークレットを使用して署名します。 Liferay は、JWT アサーションをデコードし、クライアント シークレットを使用して署名を検証することでクライアントを認証します。 ここでは、クライアントと Liferay の両方がクライアントシークレットを所有しています。

重要

Liferay DXP 2025.Q2 より前のすべてのバージョンには、OAuth 2 アプリケーションのクライアント シークレットが Base64 形式に変換され、2 つを比較するとエラーが発生するというバグがありました。 これらのバージョンの Liferay でこの問題を克服するには、Liferay の OAuth 2 アプリケーションのクライアント シークレットを Base64 でエンコードされたバージョンに置き換え、クライアントでエンコードされていないクライアント シークレットを使用して JWT に署名する必要があります。

クライアントシークレットJWTを使用する利点

  • リクエストでクライアント シークレットを送信しないため、基本的なクライアント ID + シークレットを使用するよりも安全です。

  • クライアント認証に加えて、JWT に存在する追加のクレームを確認するためにも使用できます。

  • 標準の JWT を使用するため、システム間の相互運用性が向上します。

OAuth 2 クライアントの作成

  1. グローバル メニューを開き、[コントロール パネル] → [OAuth 2 管理] に移動します。

  2. クライアントの名前と関連するコールバック URI を入力します。

  3. 「クライアント認証方法」ドロップダウンで、「クライアント シークレット JWT」を選択します。

  4. 許可された承認タイプの下の クライアント資格情報 チェックボックスをオンにします。

クライアントがユーザーからの承認を必要とする場合は、承認コード フローをチェックできます。 クライアント資格情報フローではユーザーの介入は必要ありません。

  1. [保存]をクリックします。

Liferayからアクセストークンを取得する

クライアントシークレット JWT を使用するようにクライアントを設定したら、Liferay からアクセス トークンの取得を開始できます。

機密クライアントを使用する場合は、Liferay のトークン URL https://[hostname]/o/oauth2/token に POST リクエストを送信し、本文に次のパラメータを含める必要があります ( application/x-www-form-urlencodedとしてエンコードされます)。

クライアントID=[クライアントID]

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer

client_assertion=クライアントによって生成されたJWT

grant_type=client_credentials

必ず、以下に示す必須フィールドを使用して JWT アサーションを生成し、次のような対称アルゴリズムを使用して署名してください (デフォルトは HS256)。

以下は、クライアント アプリケーションからの JWT アサーションを使用して Liferay に対して行われたトークン要求のサンプルです。

クライアント アプリケーションは、JWT アサーションを使用してトークンを要求できます。

アサーションクラフト

クライアントアサーションは次の条件を満たしている必要があります。

  • JWT の aud フィールドは、Liferay のトークン URL (https://[hostname]/o/oauth2/token) と一致する必要があります。

  • JWTの iss および sub フィールドは、Liferay OAuth 2クライアントのクライアントIDと一致する必要があります。

  • アサーションには有効期限を定義する exp クレームが必要です。