Keycloak-gatekeeper:'aud'声明和'client_id'不匹配

ark*_*diy 13 keycloak keycloak-gatekeeper

设置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"}
Run Code Online (Sandbox Code Playgroud)

我有点解决这个错误信息,硬编码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"
Run Code Online (Sandbox Code Playgroud)

rfs*_*rfs 44

使用最近的keycloak版本4.6.0,客户端ID显然不再自动添加到访问令牌的受众字段"aud"中.因此,即使登录成功,客户端也会拒绝用户.要解决此问题,您需要为客户配置受众(比较doc [2]).

在Keycloak中配置受众群体

  • 添加领域或配置现有
  • 添加客户端my-app或使用现有的
  • 转到新添加的"客户端范围"菜单[1]
    • 添加客户端范围'良好服务'
    • 在"良好服务"goto Mappers选项卡的设置中
      • 创建协议映射器'my-app-audience'
        • 姓名:my-app-audience
        • 选择Mapper类型:受众
        • 包含的客户受众:我的应用
        • 添加到访问令牌:开
  • 在"客户端"菜单中配置客户端my-app
    • 我的应用设置中的客户端范围选项卡
    • 将可用的客户端范围"良好服务"添加到指定的默认客户端范围

如果您有多个客户端,请重复其他客户端的步骤并添加良好服务范围.这背后的意图是隔离客户端访问.发布的访问令牌仅对目标受众有效.这在Keycloak的文档[1,2]中有详尽的描述.

链接到最近的主要版本的keycloak文档:

与git标签的链接:

  • 对我有用。其实步骤还可以更简单。客户端范围是共享映射器和角色。在这里我们可以为我的客户添加一个映射器。1. 编辑我的客户端 2. 打开“mapper”选项卡 3. 创建协议映射器“my-app-audience”。该值与此回复相同。 (4认同)
  • 当我添加映射器时,我的“aud”变成了[“account”,“my-custom-client”]列表,并且受众验证仍然失败。 (2认同)

Old*_*Pro 9

这是由于存在错误:https : //issues.jboss.org/browse/KEYCLOAK-8954

2个 解决方法中的bug报告中描述,这两者似乎基本上做同样的事情在这里接受的答案,但可以适用于客户范围role,所以你不必他们的个人应用到每一个客户端。


Sve*_*eit 6

如果像我一样,你想自动化 keycloak 配置,你可以使用 kcadm

/opt/jboss/keycloak/bin/kcadm.sh \
        创建客户端/d3170ee6-7778-413b-8f41-31479bdb2166/protocol-mappers/models -r your-realm \
        -s 名称=受众映射\
        -s 协议=openid-connect \
        -s protocolMapper=oidc-audience-mapper \
        -s config.\"included.client.audience\"="你的听众" \
        -s config.\"access.token.claim\"="true" \
        -s config.\"id.token.claim\"="false"