钥匙斗篷弹簧安全 Oidc id_token_hint终身



要从Keycloak v18+正确注销,我需要构造以下网址:

http://localhost:8081/realms/%REALM_NAME%/protocol/openid-connect/logout?post_logout_redirect_uri=%ENCODED_URI%&id_token_hint=%ID_TOKEN_HINT%

我的问题与id_token_hint有关。我可能会从 Spring 安全OAuth2AuthenticationToken中提取令牌提示值。现在,我不明白这个令牌的生命周期。它有有效期吗?它是否特定于每个浏览器会话?例如,如果同一用户将打开两个不同的浏览器并使用相同的凭据登录,该怎么办?如果用户要从一个浏览器注销怎么办?Keycloak会话会在第二个浏览器中自动终止吗?

我问的是id_token_hint,因为我需要为每个用户将其存储在服务器上的某个地方,所以我需要了解 - 是否可以存储为每个用户发布的最新id_token_hint(无论哪个浏览器和哪个会话是针对哪个会话发出的),还是我需要存储所有这些并以某种方式区分它们(如何, 基于什么)?

它有有效期吗?

与访问令牌一样,id 令牌具有过期时间。每次使用刷新令牌从Keycloak服务器获取新的访问令牌时,还可以请求新的ID令牌。

它是否特定于每个浏览器会话?例如,如果 同一个用户将打开两个不同的浏览器并在同一浏览器下登录 凭据。如果用户要从一个浏览器注销怎么办?将 钥匙斗篷会话在第二个自动终止 浏览器?

在Keycloak中,id令牌与用户会话紧密,您可以在上述令牌上显示的声明"sid"(会话id)上看到。如果您获得新的 id 令牌,则在当前用户会话的范围内(例如,使用刷新令牌机制获取新的 id 令牌),"sid"将保持不变但是"jti"(此令牌的唯一标识符)声明的值将更改。因此,它是一个新的 id 令牌,但与同一用户会话紧密相关。

如果在不使用刷新令牌机制的情况下向令牌端点发出全新的请求(例如,用户在其他浏览器上进行身份验证),则将获得新创建的会话 ID 的新 id 令牌大腿。

关于根据 OpenID Connect RP 发起的注销的注销行为:

当存在id_token_hint参数时,OP 必须验证 它是 ID 令牌的颁发者。在以下情况下,OP 应接受 ID 令牌 由 ID 令牌的 aud 声明和/或 sid 声明标识的 RP具有 当前会话或最近在 OP 上有一个会话,即使 exp 时间过去了。如果 ID 令牌的 sid 声明与 RP 的当前会话或 OP 的最近会话,OP 应 将注销请求视为可疑,并可能拒绝对其采取行动。

基于此,我的假设是Keycloak将注销id令牌中声明"sid"上编码的用户会话。

最新更新