【问题标题】:Keycloak Access Token vs UserInfo token?Keycloak 访问令牌与 UserInfo 令牌?
【发布时间】:2018-07-27 10:10:44
【问题描述】:

使用 Keycloak 时访问令牌与用户信息令牌有何不同?

从 OAuth2/OpenIDConnect 我了解到访问令牌提供了用户已通过身份验证的信息 并且您需要使用用户信息令牌来获取有关用户及其个人资料/角色等的更多信息。

当我查看 https://jwt.io/ 与 UserInfo 令牌之类的访问令牌时。我能够获得有关用户个人资料和角色的相同信息。

为什么会这样,使用 Keycloak 时访问令牌与用户信息令牌有何不同?

【问题讨论】:

标签: oauth oauth-2.0 openid-connect keycloak


【解决方案1】:

访问令牌旨在为您提供对应用程序资源的访问权限。为了获得访问令牌,您必须使用spec 定义的任何流对自己进行身份验证。在 keycloak 中,访问令牌包含用户名和角色,但您也可以使用管理面板add custom claims。添加一些声明可能很有用,因为令牌是在每个请求中发送的,您可以从应用程序中对其进行解码。

根本没有用户信息令牌,实际上是endpoint。使用您在第一步中获得的访问令牌访问此端点,通常会提供一个 JSON 响应,其中包含有关用户的详细信息(例如用户数据、角色...)。

【讨论】:

  • 谢谢@Xtreme,同意。但是,使用 Keycloak 我会得到相同的信息。双方。在访问令牌中,我得到以下关于用户的信息: { .. "group_membership": [ "/group1" ], "user_attribute": [ "userattribute" ], "preferred_username": "USERNAME", "email": "USERNAME@email.com" } 并且来自 UserInfo 端点的响应是 { "group_membership": [ "/group1" ], "user_attribute": [ "userattribute" ], "preferred_username": "USERNAME" , "email": "USERNAME@email.com" }
  • 这取决于实现(在本例中为 KC)及其配置方式。规范并没有告诉它不能是相同的信息。但显然,正如我上面所说,它们有不同的用途。
【解决方案2】:

我设法弄清楚如何在为这两个端点使用 Keyclok 时获取不同的数据:

Keycloak 为“OIDC 令牌和 SAML 断言映射”提供功能,您还可以“控制声明的放置位置”。 通过使用按钮: - 添加到 ID 令牌 - 添加访问令牌 - 添加到用户信息 通过将某些映射器的“添加到 ID 令牌”和“添加到访问令牌”设置为 OFF。 这些将不会包含在 AccessToken 中,因为它们将包含在 UserInfo 响应中。

http://www.keycloak.org/docs/latest/server_admin/index.html#_protocol-mappers

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 2017-10-11
    • 2020-09-29
    • 2019-11-11
    • 2019-12-08
    • 1970-01-01
    • 2021-10-09
    • 2019-01-13
    相关资源
    最近更新 更多