JWTベアラーフローの設定
JWT ベアラー フローは、外部トークン サービスからの署名済み JWT を Liferay からのアクセス トークンと交換します。 このフローを使用するには、OAuth 2 クライアントを作成し、JWT の iss、 sub、および署名キーに一致する受信アサーション発行者を構成します。 発行者を設定したら、OAuth 2 クライアントを更新して、 JWT_BEARER 認証タイプをサポートします。 次に、トークン サービスは署名されたアサーションを Liferay のトークン エンドポイントに送信し、アサーションが有効な場合は Liferay がアクセス トークンを返します。
フローの仕組みの背景については、 認可付与としてのアサーション を参照してください。
着信アサーション発行者の構成
-
グローバル メニュー (
) を開き、 コントロール パネル → インスタンス設定に移動します。 -
OAuth 2 受信アサーション構成で、 追加をクリックします。
-
発行者の名前、JSON Web キー セット、およびユーザー認証タイプを入力します。

-
[保存]をクリックします。
発行者の値は、発行者の JWT アサーション内の iss 値と等しくなければなりません。 ユーザー認証タイプの値は、JWT アサーション内の サブ 値と一致する必要があります。 これらの値をマップするには、トークン サービスで追加の構成が必要になる場合があります。
JSON Web キー セットは通常、トークン サービスの JWKS URI で入手できます。 たとえば、Keycloakを使用している場合、JWKS URIは次の場所で入手できます。
http://{hostname}/realms/{realm_name}/protocol/openid-connect/certs
オーディエンスクレーム要件
受信 JWT アサーションには、Liferay のトークン エンドポイントに一致する aud クレームが含まれている必要があります。 対象者が一致しない場合、Liferay は invalid_grant を返します。
ローカルインスタンスの例:
aud: http://localhost:8080/o/oauth2/token
Liferay インスタンスの正確なトークン エンドポイント URL を使用します。
aud クレームには複数の値 (JSON 配列) を含めることができます。 Liferay では、トークン エンドポイントと一致するエントリが 1 つだけ必要です。 外部 ID プロバイダーによって追加された追加のオーディエンスは無視されます。
無効な許可エラーのトラブルシューティング
invalid_grant エラーには詳細が欠けています。 特定の検証エラーを出力するロガーを追加して、どの JWT クレームが欠落しているか、または間違っているかを確認できます。
-
グローバル メニュー (
) を開き、 コントロール パネル タブに移動して、 サーバー管理をクリックします。 -
ログ レベル タブを開き、 新規をクリックします。
-
ロガー名を
com.liferay.oauth2.provider.rest.internal.endpoint.access.token.grant.handlerに設定し、ログレベルをDEBUGに設定します。 -
[保存]をクリックします。
このログ出力は、受信アサーション内の正確な問題を特定するのに役立ち、JWT 構成の調整が容易になります。
JWTベアラーフローの有効化
受信アサーション発行者を構成した後、クライアントの JWT ベアラー フローが有効になっていることを確認します。
-
グローバル メニュー (
) を開き、 コントロール パネル → OAuth 2 管理に移動します。 -
OAuth 2 クライアントを選択し、「許可された認証タイプ」まで下にスクロールします。
-
JWT_BEARER チェックボックスをオンにします。
-
[保存]をクリックします。
Liferayからアクセストークンを取得する
着信アサーション発行者を設定し、クライアントの JWT_BEARER フローを有効にすると、Liferay からアクセス トークンの取得を開始できます。
機密クライアントを使用している場合は、Liferay のトークン URL https://{hostname}/o/oauth2/token への POST リクエストを開始し、本文に次のパラメータを含める必要があります ( application/x-www-form-urlencodedとしてエンコードされます)。
client_id=YOUR_CLIENT_ID
client_secret=YOUR_CLIENT_SECRET
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=JWT assertion from the token service
以下は、Keycloak からの JWT アサーションを使用して Liferay に対して行われたトークン要求のサンプルです。 Keycloak は、Liferay の着信アサーション発行者として設定されています。
