gpt4 book ai didi

oauth-2.0 - 如何撤销 JWT token ?

转载 作者:行者123 更新时间:2023-12-02 21:46:28 26 4
gpt4 key购买 nike

我正在使用 Spring Security OAuth2 和 JWT token 。我的问题是:如何撤销 JWT token ?

正如这里提到的 http://projects.spring.io/spring-security-oauth/docs/oauth2.html ,撤销是通过刷新 token 完成的。但这似乎不起作用。

最佳答案

一般来说,最简单的答案是您无法撤销 JWT token ,但这根本不是事实。诚实的答案是,支持 JWT 撤销的成本足够大,在大多数情况下不值得,或者直接重新考虑 JWT 的替代方案。

话虽如此,在某些情况下,您可能需要 JWT 和立即 token 撤销,因此让我们了解一下它需要做什么,但首先我们将介绍一些概念。

JWT ( Learn JSON Web Tokens ) 仅指定 token 格式,此撤销问题也适用于通常称为自包含或按值 token 的任何格式。我喜欢后一个术语,因为它与引用标记形成了很好的对比。

by-value token - associated information, including token lifetime, is contained in the token itself and the information can be verified as originating from a trusted source (digital signatures to the rescue)

by-reference token - associated information is kept on server-side storage that is then obtained using the token value as the key; being server-side storage the associated information is implicitly trusted

在 JWT Big Bang 之前,我们已经在身份验证系统中处理过 token ;应用程序通常会在用户登录时创建一个 session 标识符,然后使用该标识符,以便用户不必每次都重复登录过程。这些 session 标识符被用作服务器端存储的关键索引,如果这听起来与您最近读到的内容相似,那么您是对的,这确实属于引用 token 。

使用相同的类比,理解引用 token 的撤销是微不足道的;我们只需删除映射到该 key 的服务器端存储,下次提供该 key 时它将无效。

对于按值代币,我们只需要实现相反的操作。当您请求撤销 token 时,您会存储一些内容来唯一标识该 token ,以便下次收到它时您可以额外检查它是否被撤销。如果您已经认为这样的东西无法扩展,请记住您只需要存储数据直到 token 过期,并且在大多数情况下您可能只存储 token 的哈希值,这样它就总是是已知大小的东西。

最后一点,为了将其集中在 OAuth 2.0 上,按值访问 token 的撤销目前尚未标准化。尽管如此,OAuth 2.0 token 撤销明确指出,只要授权服务器和资源服务器都同意处理此问题的自定义方式,它仍然可以实现:

In the former case (self-contained tokens), some (currently non-standardized) backend interaction between the authorization server and the resource server may be used when immediate access token revocation is desired.

如果您同时控制授权服务器和资源服务器,这很容易实现。另一方面,如果您将授权服务器角色委托(delegate)给云提供商(如 Auth0)或第三方组件(如 Spring OAuth 2.0),您很可能需要以不同的方式处理问题,因为您可能只能得到已经标准化的内容。

有趣的引用

本文解释了另一种方法:Blacklist JWT它包含一些有趣的实践和模式,后跟 RFC7523

关于oauth-2.0 - 如何撤销 JWT token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com