设置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"
答案 0 :(得分:24)
在最新的4.6.6版密钥库中,客户端ID显然不再自动添加到访问令牌的受众字段“ aud”中。 因此,即使登录成功,客户端也会拒绝用户。 要解决此问题,您需要为客户配置受众群体(比较文档[2])。
如果您有多个客户端,请对其他客户端也重复上述步骤,并添加良好服务范围。 其背后的目的是隔离客户端访问。颁发的访问令牌仅对目标受众有效。 Keycloak的文档[1,2]中对此进行了详细说明。
答案 1 :(得分:4)
如果像我一样,要自动执行密钥斗篷配置,则可以使用kcadm
/opt/jboss/keycloak/bin/kcadm.sh \ create clients/d3170ee6-7778-413b-8f41-31479bdb2166/protocol-mappers/models -r your-realm \ -s name=audience-mapping \ -s protocol=openid-connect \ -s protocolMapper=oidc-audience-mapper \ -s config.\"included.client.audience\"="your-audience" \ -s config.\"access.token.claim\"="true" \ -s config.\"id.token.claim\"="false"
答案 2 :(得分:3)
这是由于以下错误:https://issues.jboss.org/browse/KEYCLOAK-8954
错误报告中描述了two workarounds,它们似乎都与accepted answer here做着相同的事情,但是可以应用于客户范围{{1} },因此您不必将它们分别应用于每个客户。