以下のエラーを回避するためにaud
クレームを設定する正しい方法は何ですか?
unable to verify the id token {"error": "oidc: JWT claims invalid: invalid claims, 'aud' claim and 'client_id' do not match, aud=account, client_id=webapp"}
aud
が自分のclient_id
。より良い方法はありますか?
これが私のdocker-compose.yml
:
version: '3'
services:
keycloak-proxy:
image: "keycloak/keycloak-gatekeeper"
environment:
- PROXY_LISTEN=0.0.0.0:3000
- PROXY_DISCOVERY_URL=http://keycloak.example.com:8181/auth/realms/realmcom
- PROXY_CLIENT_ID=webapp
- PROXY_CLIENT_SECRET=0b57186c-e939-48ff-aa17-cfd3e361f65e
- PROXY_UPSTREAM_URL=http://test-server:8000
ports:
- "8282:3000"
command:
- "--verbose"
- "--enable-refresh-tokens=true"
- "--enable-default-deny=true"
- "--resources=uri=/*"
- "--enable-session-cookies=true"
- "--encryption-key=AgXa7xRcoClDEU0ZDSH4X0XhL5Qy2Z2j"
test-server:
image: "test-server"
最近のkeycloakバージョン4.6.0では、クライアントIDはアクセストークンのオーディエンスフィールド「aud」に自動的に追加されていないようです。したがって、ログインは成功しても、クライアントはユーザーを拒否します。これを修正するには、クライアントのオーディエンスを構成する必要があります(doc [2]と比較してください)。
複数のクライアントがある場合、他のクライアントについても同様の手順を繰り返し、good-serviceスコープを追加します。この背後にある意図は、クライアントアクセスを分離することです。発行されたアクセストークンは、対象ユーザーに対してのみ有効です。これは、Keycloakのドキュメント[1,2]で詳細に説明されています。
これはバグが原因です: https://issues.jboss.org/browse/KEYCLOAK-8954
two回避策 がバグレポートに記載されており、どちらも基本的に 受け入れられた回答 と同じように見えますが、適用できますクライアントスコープrole
に追加されるため、すべてのクライアントに個別に適用する必要はありません。