我已经设法使用新的Spring授权服务器设置了一个OAuth2身份提供者。为了执行一些测试,我使用了Postman - OAuth2身份验证流程,我能够毫无问题地获得一个JWT令牌。令牌刷新也可以完美地开箱即用。使用获得的令牌,经过相当长的反复试验过程,我能够在另一个Sping Boot 项目上保护一个API。问题是,我不知道如何测试注销过程通过 Postman 。有谁可以帮助我,提供一个链接到任何例子?谢谢你提前。
我希望令牌在进程结束后失效,这样它就不能再用于保护API端点。
我已经设法使用新的Spring授权服务器设置了一个OAuth2身份提供者。为了执行一些测试,我使用了Postman - OAuth2身份验证流程,我能够毫无问题地获得一个JWT令牌。令牌刷新也可以完美地开箱即用。使用获得的令牌,经过相当长的反复试验过程,我能够在另一个Sping Boot 项目上保护一个API。问题是,我不知道如何测试注销过程通过 Postman 。有谁可以帮助我,提供一个链接到任何例子?谢谢你提前。
我希望令牌在进程结束后失效,这样它就不能再用于保护API端点。
1条答案
按热度按时间7jmck4yq1#
RP Initiated Logout是一种使OIDC授权服务器上的用户会话无效的标准方法。在注销方面,并非所有“OIDC”授权服务器都符合规范,但我认为Spring的服务器符合规范。(短)规范,说明如何从
.well-known/openid-configuration
查找注销端点URI以及如何构建注销请求(方法、参数等)。使用这些元素,您应该能够构建Postman请求以使OP上的用户会话无效。JWT是不可变的,你不能使它无效(即使你可以,你也永远不能保证你更新了所有现有的副本)。它从发行到过期都是有效的。
您可以使以下位置的用户会话无效:
如果您不能信任客户端在用户注销时删除访问令牌,并且如果访问令牌的有效期不够短,无法接受注销后的访问风险,那么您可能必须将资源服务器从JWT解码切换到令牌内省。是的,您可以内省JWT,但不可以,内省根本没有效率。
顺便说一句,如果你不能信任客户端处理访问令牌的方式,那么你就有了一个比用户注销后访问令牌的剩余寿命更大的安全问题...
对第一条评论做出答复
登录和注销是客户端的责任,而不是资源服务器的责任,REST API是资源服务器(它应该依赖于
spring-boot-starter-oauth2-resource-server
,而不是spring-boot-starter-oauth2-client
)。我敢打赌,您面临的问题不是由于访问令牌仍然有效,而是用户会话仍然有效,并且用户登录是静默完成的,因为这=〉调用授权服务器上的
end_session_endpoint
,如上面链接的规范所述(是的,您应该按照链接阅读内容)。您需要执行以下操作:
TokenRelay
过滤器,spring-cloud-gateway
可以用作BFF。我在this specific tutorial from the collection linked above中使用spring-cloud-gateway
(和Angular)实现了完整的BFF。无论您为OAuth2客户端选择何种实现(在浏览器中是公开的还是在您的服务器上是保密的),它都有责任触发RP Initiated Logout以使授权服务器上的用户会话无效
OidcClientInitiatedLogoutSuccessHandler
(或React应用程序中的OidcClientInitiatedServerLogoutSuccessHandler
),在您的客户端注销后将用户重定向到授权服务器,以便两个会话都无效