【问题标题】:Extend user access token in Keycloak with external data使用外部数据扩展 Keycloak 中的用户访问令牌
【发布时间】:2017-11-15 05:20:06
【问题描述】:

我们使用 Keycloak 服务作为 SSO 解决方案,并将生成的 JWT 提供给不同的微服务,效果非常好。

但现在我们遇到的问题是,当用户尝试登录时,JWT 必须使用来自外部资源的数据进行扩展。

更具体的是,用户可以使用唯一 ID 作为标识符访问不同的市场,但我们没有看到在 Keycloak 服务中管理哪个用户可以访问哪个市场。

这个问题的最佳解决方案是什么? 阅读文档后,自定义用户存储 SPI 是一个答案,但我认为这有点过分..

作为信息,我们使用 Keycloak 3.1.0 作为带有 postgres 数据库的独立服务

【问题讨论】:

    标签: jwt keycloak


    【解决方案1】:

    向 keycloak JWT 令牌负载添加额外数据/信息的方式是通过在其中添加配置有适当 协议映射器 的“客户端范围”,允许您添加任何您的 Id-token 和 access-token 的自定义额外信息量。

    这方面的一个例子是,在您的用户中有额外的变量,然后在(新创建的)“客户端范围”内的协议映射器中,您可以添加类型为“用户属性”的协议映射器,以便您的特定用户变量将以您在“协议映射器”上配置的方式出现在您的令牌中。有许多类型的“协议映射器”允许您将不同的类型信息映射到您的令牌(不仅仅是用于映射用户变量)。

    这个问题之前已经解决过:

    Keycloak User Storage SPI Implementation

    我在这里复制与您相关的部分:

    原来的问题是:

    [How to]"从外部数据源中获取一些属性,映射到keycloak的id和access token。需要获取用户的唯一id,并将其作为主题id添加到jwt中。就是id,剩下的当此令牌传递给其他服务时,服务可以使用它来检索 id。"

    [答案:]

    为此,您能做的最好的事情是: 将这些用户的唯一数据添加为用户属性(在管理控制台上查看) 在 Keycloak 上创建一个“客户端范围”,并使用相应的“用户属性”类型的映射器将您想要添加的每个值(从您的用户数据)映射到您的 Id-token 和 access-token。您还需要将您的客户与您刚刚创建的“客户范围”联系起来。这可能听起来有点令人困惑,但这个视频是很好的材料,我相信它会对你有很大帮助:https://www.youtube.com/watch?v=ZxpY_zZ52kU(大约在 6:30 左右,你会看到如何为你的令牌添加额外的用户信息)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 2019-02-14
      • 2017-03-31
      • 1970-01-01
      • 2014-10-29
      • 2013-07-13
      • 2021-06-16
      • 2019-09-27
      相关资源
      最近更新 更多