我目前正在使用 Spring Security OAuth2 授权服务器,以便为连接到我的应用程序的用户生成 jwt。问题是默认情况下 Spring Security OAuth2 授权服务器具有以下工作流程:
问题是这对多个用户不起作用,这意味着如果另一个用户来做一个请求,它不会再次提示他输入凭据,它会在 spring security 上下文中看到以前的用户。你如何克服这种情况? Spring Authorization Server 不就是为这种场景而生的吗?
您正在描述一个用户“窃取”前一个用户生成的有效令牌并能够进行后续调用的场景。
为了缓解这种情况——或者至少是为了减少影响——每个代币都有一个有限的 TTL(生存时间),并在该时间后过期。
使用过期(无效)令牌调用 API 调用登录页面。
令牌撤销需要客户端身份验证,因此在使用公共客户端时默认情况下是不可能的。最近添加了 OpenID Connect 1.0 注销端点,它专为这种情况而设计,需要 ID 令牌而不是访问令牌。此功能将在版本
1.1
.中发布
另外,请参阅这个答案以了解令牌撤销和注销为何不同的解释(尽管请注意,自撰写此答案以来已添加了上述注销功能)。