Keycloak:我无法将自定义用户属性添加到令牌中?

问题描述 投票:0回答:1

我的用户有一个

birthDate
属性:

enter image description here

我在客户端创建了一个映射器:

enter image description here enter image description here

但是在访问令牌中看不到它:

{
  "exp": 1646589516,
  "iat": 1646589216,
  "jti": "7cee1468-8d80-4f14-a118-b07477c1e1e7",
  "iss": "http://localhost:8080/realms/...",
  "aud": "account",
  "sub": "f:fd2a5a5a-c7a0-4e74-81a8-916a85885f98:...",
  "typ": "Bearer",
  "azp": "...",
  "session_state": "efce7a63-2a8f-438d-b4a1-f5d979a00c81",
  "acr": "1",
  "realm_access": {
    "roles": [
      "offline_access",
      "uma_authorization"
    ]
  },
  "resource_access": {
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  },
  "scope": "openid profile email",
  "sid": "efce7a63-2a8f-438d-b4a1-f5d979a00c81",
  "email_verified": false,
  "preferred_username": "..."
}

keycloak 会不会缓存在某个地方? (我清除了

Realm
-->
Caches
处的缓存)

我很绝望......每个教程都这样做,但它对我不起作用。

更新:我可以在远程服务器上测试它并且它正在工作。钥匙斗篷到底在哪里缓存并搞砸了我?

---------------------------------------------------------------------------

更新2:删除了keycloak并重新安装,所以从0开始:

  1. 创建的领域:ep

  2. 已创建客户:ep 3)

  3. 在这里我们可以看到用户有一个属性

    birthDate
    ,其值为
    my-custom-birth-date
    enter image description here

  4. 我去

    Clients
    -->
    ep
    客户端 -->
    Mappers
    并创建一个像这样的映射器:

enter image description here

  1. Clients
    -->
    ep
    -->
    Client Scopes
    -->
    Evaluate
    -->
    Evaluate
    按钮我们可以看到
    birthDate
    可以在那里找到(最后一行,也是默认的
    birthdate
    可见):

enter image description here

  1. 如果我对用户进行评估
    P...o
    那么您可以看到访问令牌不包含
    birthDate
    属性:

enter image description here

  1. 如果我使用邮递员为该用户请求令牌,则 access_token 如下所示:

enter image description here enter image description here

仍然缺少属性

birthDate

我重复了上面所做的每一个操作,并且在远程钥匙斗篷中可以看到该属性(图像上的最后一个):

enter image description here

---------------------------------------------------------------------------

所以我发现了问题:

这是我的 keycloak 文件夹及其路径:

enter image description here

我将

data
文件夹复制到此处,认为我不需要重新创建领域/客户端/等:

enter image description here

每当我重新安装 keycloak 时,我都会删除

keycloak-17.0.0
文件夹并重新安装到同一位置:

enter image description here

在我删除了

data
keycloak-17.0.0
并重新创建领域/客户端/映射器/等后,它工作正常......

不知道为什么 keycloak 检查树上方的配置/设置/缓存文件夹...

keycloak
1个回答
0
投票

我也无法将用户属性添加到令牌中。 对我来说,解决方案是使用 keycloak 的

token exchange
功能。 更多信息 -> https://www.keycloak.org/securing-apps/token-exchange

为此,我必须执行以下操作:

  1. 向 keycloak 的构建命令添加 features 选项。然后重建/重新启动 keycloak。
kc.sh build --features="token-exchange"
  1. /auth/realms/client-id/protocol/openid-connect/token
    端点发出POST keycloak请求,并在有效负载中包含
    grant_type=password
  2. 从此请求获取访问令牌
  3. 使用
    /auth/realms/client-id/protocol/openid-connect/token
    grant_type=urn:ietf:params:oauth:grant-type:token-exchange
    subject_token
    端点发出新请求,其中包含先前请求的访问令牌。
  4. token exchange
    解码令牌以能够查看用户属性。
© www.soinside.com 2019 - 2024. All rights reserved.