如何在服务器端更改范围时使 JWT 令牌无效

问题描述

我正在实施 oauth2 客户端凭据流。当调用 Auth 服务器以获取令牌时......我返回一个 jwt 令牌,其中还包括范围(例如 read:orders 和 write:orders)以及作为观众的 api 标识符(.. /serv/api/v1/orders)。当我使用 then 令牌时,我将它作为不记名令牌在身份验证标头中传递。当我检查令牌是否有效时,我会检查过期日期。如果调用的 API 与受众相同,并且调用的端点是否具有包含在我的令牌中的范围。如果服务器端我删除了范围(例如我删除了 write:order 范围),则前一个令牌也包含写入范围。实际上,我唯一要做的就是等待令牌失败,当我获得新令牌时,我将没有写入范围。

如何在到期前使​​之前的令牌失效? 我应该在令牌验证期间检查范围服务器端吗?在这种情况下,我认为将范围注册到令牌中是没用的。

感谢您的帮助。

解决方法

如果您需要在到期日期之前使令牌失效,那么您必须在授权服务器中跟踪颁发的令牌,标记那些应该失效的令牌,然后通过向授权服务器发出请求使 API 验证令牌.

正如您所指出的,在这样的设置中,令牌中的范围的使用并不多。我建议使用不透明令牌而不是 JWT 作为您的访问令牌。然后让您的 API 执行令牌自省——这是 OAuth 中的标准化操作。授权服务器将返回与您的令牌对应的范围,如果令牌已失效,则返回 404。