OpenID Connect - 刷新 ID 令牌

OpenID Connect - Refreshing ID token

提问人:Sanath Surya 提问时间:11/12/2023 更新时间:11/12/2023 访问量:30

问:

我一直在为本机应用程序(具有服务器组件)实现 OpenID Connect。我正在模仿本机应用程序的授权代码流。在 OIDC 流之后,在服务器端接收 ID 令牌、Accesstoken 和刷新令牌。服务器验证 ID 令牌并将应用会话返回给本机客户端。

我不清楚此流程中刷新令牌的用例。在这种情况下,支持刷新 ID 令牌是否有意义?即,如果应用程序会话过期,并且客户端将过期的应用程序会话传递给服务器,则服务器可以使用刷新令牌获取刷新令牌,并从 OAuth 服务器获取新的 ID 令牌并铸造新的应用程序会话。这种方法似乎与(不完全相同)具有长期存在的应用程序会话一样好,b'coz 应用程序始终可以更新应用程序会话以代替其过期的会话。

我尝试了 Okta 开发人员控制台,它支持刷新 ID 令牌。但我不清楚刷新 ID 令牌的用例。

令牌 openid-connect 刷新令牌

评论


答:

0赞 Gary Archer 11/12/2023 #1

在 OAuth 中,ID 令牌表示身份验证事件的证明。同时,用户身份验证后颁发的第一个刷新令牌表示客户端与 API 会话的生存期。

发生令牌刷新时,通常还会颁发新的刷新令牌。颁发新的 ID 令牌没有意义,如 OpenID Connect 规范的相关部分所述。授权服务器可以选择在刷新响应中返回 ID 令牌。根据我的经验,这样做的唯一真正用例是启用 OAuth 库,这些库期望所有 3 个令牌都存在于令牌响应中。

Web 客户端通常使用后端,该后端在验证 ID 令牌后引导基于 cookie 的会话。Cookie 经过加密,包含或引用基础 OAuth 令牌。令牌刷新后,Cookie 可能会被重写,但客户端不能仅仅因为获得新的 ID 令牌而使用 API 扩展自己的会话。相反,当原始刷新令牌的生存期到期时,API 会话将过期。

评论

0赞 Sanath Surya 11/12/2023
感谢您的及时回复。“令牌刷新后,Cookie 可能会被重写。”您的意思是服务器应该在刷新令牌后在响应中返回新的cookie吗?这不和长寿饼干一样吗?“刷新令牌”在这里解决了什么问题吗?“当原始刷新令牌的生存期到期时,API 会话将过期。”对不起,你说的会话是什么意思?饼干?
0赞 Gary Archer 11/13/2023
调用 API 时使用 HTTP 消息凭据(访问令牌或 cookie)。这应该具有较短的生命周期,例如 15 分钟,因此如果凭据以某种方式被盗,则不会长时间滥用。刷新令牌启用此功能。我所说的会话是指可以调用 API(资源服务器)的时间。
0赞 Sanath Surya 11/13/2023
再次感谢加里。“如果凭证以某种方式被盗,它不能被滥用很长时间。刷新令牌实现了这一点”。我对刷新令牌的理解是,如果客户端传递过期的令牌,那么服务器将自动刷新令牌并将新令牌返回给客户端。那么在这种情况下,被盗的代币也可以用来获得新的代币,对吗?只有当我们知道令牌被盗时,它才能以某种方式被列入黑名单。
0赞 Gary Archer 11/13/2023
理想情况下,客户端应使用短期 API 凭据,例如 15 分钟,这就是 OAuth 的设计方式。API 必须拒绝访问令牌过期的请求。