秘密鍵 JWT (JSON Web Token) の使用
Liferay は、OAuth 2 クライアントの認証方法として秘密鍵 JWT をサポートしています。 このフローでは、クライアント自体がアサーションを作成します。 Liferay は、JWT アサーションをデコードし、クライアントの公開キーを使用して署名を検証することでクライアントを認証します。
秘密鍵JWTを使用する利点
- 共有シークレットがないため、基本的なクライアント ID + シークレットやクライアント シークレット JWT 認証を使用するよりも安全です。 クライアントは、秘密鍵を使用して署名された JWT アサーションを生成します。 サーバーはクライアントの公開鍵を使用して署名を検証します。
- 非対称キー署名の使用により、より強力な否認防止機能を提供します。 サーバーは署名を検証した後、クライアントの送信元を確認できます。
- サーバーはクライアントシークレットを保存する必要はありません。
- キーを変更するには、サーバーはクライアントからの公開キーを変更する必要があります。
OAuth 2 クライアントの作成
-
グローバル メニュー (
) を開き、 コントロール パネル → OAuth 2 管理に移動します。 -
新規をクリックします。
-
名前と関連するコールバック URI を入力します。
-
クライアント認証方法ドロップダウンで、 秘密キー JWTを選択します。
-
JSON Web Key Set 入力に、クライアントの JWKS を貼り付けます。 これは、クライアントの秘密鍵を使用して署名された JWT アサーションを検証するために使用されるクライアントの公開鍵です。
-
許可された承認タイプで クライアント資格情報 を選択します。
注クライアントがユーザーからの承認を必要とする場合は、承認コード フローを選択できます。 クライアント資格情報フローではユーザーの介入は必要ありません。
-
[保存]をクリックします。
Liferayからアクセストークンを取得する
クライアントが秘密鍵 JWT を使用するように設定したら、Liferay からアクセス トークンの取得を開始できます。 機密クライアントを使用する場合は、Liferay のトークン URL https://{hostname}/o/oauth2/token への POST リクエストを開始する必要があります。その際、本文には次のパラメータを指定します ( application/x-www-form-urlencodedとしてエンコードされます)。
client_id=YOUR_CLIENT_ID
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion=JWT generated by the client
grant_type=client_credentials
以下は、クライアント アプリケーションからの JWT アサーションを使用して Liferay に対して行われたトークン要求のサンプルです。

アサーションクラフト
クライアントアサーションは次の条件を満たしている必要があります。
- JWT の
audフィールドは、Liferay のトークン URLhttps://{hostname}/o/oauth2/tokenと一致する必要があります。 - JWTの
issおよびsubフィールドは、Liferay OAuth 2クライアントのクライアントIDと一致する必要があります。 - アサーションには有効期限を定義する
expクレームが必要です。