Jwt 使用外部数据扩展KeyClope中的用户访问令牌

Jwt 使用外部数据扩展KeyClope中的用户访问令牌,jwt,keycloak,Jwt,Keycloak,我们使用keydepot服务作为SSO解决方案,并将生成的JWT提供给不同的微服务,这非常有效 但是现在我们有一个问题,当用户尝试登录时,JWT必须使用来自外部资源的数据进行扩展 更具体的是,用户可以使用唯一ID作为标识符访问不同的市场,但我们没有看到在KeyClope服务中管理哪个用户可以访问哪个市场 这个问题的最佳解决方案是什么? 阅读文档后,定制用户存储SPI是一个答案,但我认为这有点过分了 作为信息,我们将Key斗篷3.1.0作为一项独立服务与postgres DB一起使用,您向Key斗

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

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

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

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


作为信息,我们将Key斗篷3.1.0作为一项独立服务与postgres DB一起使用,您向Key斗篷JWT令牌有效载荷添加额外数据/信息的方式是通过在其中添加“客户端范围”配置适当的协议映射器来实现的,这允许您向Id令牌和访问令牌添加任意数量的自定义额外信息

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

这是在以下情况之前就这一问题提出的:

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

最初的问题是:

[如何]“从外部数据源检索某些属性,将其映射到KeyClope的id和访问令牌。需要检索用户唯一id并将其作为jwt中的主题id添加。当此令牌传递给其他服务时,其余服务可以使用该id检索id。”

[答:]

为此,您所能做的就是: 将这些用户的唯一数据添加为用户属性(请在管理控制台上查看) 在keydove上创建一个“客户机范围”,使用类型为“user property”的对应映射器将要添加的每个值(从用户数据)映射到Id令牌和访问令牌。您还需要将您的客户与刚刚创建的“客户范围”联系起来。这听起来可能有点让人困惑,但这段视频是很好的素材,我相信它会对您有很大帮助:(在6:30左右,您将看到如何向您的代币添加额外的用户信息)