クライアントシークレット 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 クライアントの作成
-
グローバル メニューを開き、[コントロール パネル] → [OAuth 2 管理] に移動します。
-
クライアントの名前と関連するコールバック URI を入力します。
-
「クライアント認証方法」ドロップダウンで、「クライアント シークレット JWT」を選択します。
-
許可された承認タイプの下の クライアント資格情報 チェックボックスをオンにします。
クライアントがユーザーからの承認を必要とする場合は、承認コード フローをチェックできます。 クライアント資格情報フローではユーザーの介入は必要ありません。
- [保存]をクリックします。
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 の
audフィールドは、Liferay のトークン URL (https://[hostname]/o/oauth2/token) と一致する必要があります。 -
JWTの
issおよびsubフィールドは、Liferay OAuth 2クライアントのクライアントIDと一致する必要があります。 -
アサーションには有効期限を定義する
expクレームが必要です。