【问题标题】:Enable sid claim in the Keyclaok id token在 Keycloak id 令牌中启用 sid 声明
【发布时间】:2021-02-23 13:41:53
【问题描述】:

我目前正在将 Keycloak 配置为联合身份提供商,以测试 OIDC 反向通道注销流程。

在 id 令牌和注销令牌中,默认情况下它们不包含 sid 声明,因为它是可选声明。但是在客户端的配置中,有一个配置可以在反向通道注销令牌中启用会话标识符。 Config to enable 'sid' claim。如果启用此功能,则注销令牌将具有 sid 声明,但 id 令牌不会。

OIDC Specification 第 2.1 节,

backchannel_logout_session_supported: 可选的。布尔值,指定 OP 是否可以在 Logout Token 中传递 sid(会话 ID)Claim 以标识与 OP 的 RP 会话。如果支持,sid 声明也包含在 OP 发布的 ID 令牌中。如果省略,则默认值为 false。

据此,如果sid 声明包含在注销令牌中,id 令牌也应该有sid 声明

有没有办法在 id 令牌中也包含 sid 声明? 如果不是,那么仅在注销令牌中而不在 id 令牌中声明 sid 的目的是什么?

【问题讨论】:

    标签: keycloak openid-connect


    【解决方案1】:

    我不熟悉反向通道流程,但通常您希望使用 KeyCloak 的“映射器”概念将声明添加到令牌中。身份提供者和客户端都可以拥有映射器,具体取决于您需要添加数据的位置。

    客户端和 IdP 配置将有不同的“映射器类型”可用。 “映射器类型”字段是配置映射器时最重要的字段 - 它确定数据的来源(某些会话值、某些用户属性等)。我们经常需要为新的映射器类型编写小的自定义实现,以从 Java 层中提取一些数据,以便我们可以将其放入令牌中。

    【讨论】:

    • sid 值是用户在浏览器或设备上的唯一会话标识符。 'sid' 声明必须由身份提供者为特定会话生成并添加到 id 令牌或注销令牌中。 Keycloak 中的问题是,我可以在注销令牌中获得 sid,但不能在 id 令牌中获得。我已经编辑了问题并添加了 OIDC 规范部分,他们在其中指定了“sid”声明支持。
    • 是的,我正确理解了您的问题,我告诉您在关键 Cloak 的哪个位置您可以将自己的声明添加到令牌中。如果他们不为 SID 公开映射器,您很可能可以编写自己的映射器实现,这很容易做到,而且很可能它所要做的就是查找当前上下文的 SID
    • 是的,您的建议似乎是目前的解决方案。感谢您的回复。
    • 当然。我确实希望预定义映射器的数量是 3-4 倍 :-) 问题似乎不是每个人都在专有上下文中编写它们,所以它们不会回到上游
    猜你喜欢
    • 2022-12-29
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2021-09-23
    • 2015-12-18
    • 2020-09-09
    • 2016-09-18
    • 2016-11-15
    相关资源
    最近更新 更多