java 如何在Sping Boot 3中使用Spring Security处理Oauth和非Oauth授权?

wixjitnu  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(266)

在我们的Spring 5应用程序中,我们有Oauth和Non-Oauth身份验证流,任何一个身份验证流都可以使用设置。
对于oauth,我们使用内部授权服务器并获取jwt访问令牌。
对于非OAuth,我们使用相同的内部授权服务器的不同端点,其获取用户名和密码并返回不是JWT令牌的令牌。
因此,对于授权,我们使用两个不同的流,每个流使用不同的端点来验证令牌。
现在我们正在升级到spring Boot 3和spring webflux,所以我们计划使用spring security来保护端点。
我已经使用Spring Security和Resource Server探索了Oauth,但它只处理Oauth的情况。
我正在阅读https://medium.com/geekculture/jwt-authentication-with-oauth2-resource-server-and-an-external-authorization-server-2b8fd1524fc8文章以了解oauth流程。
我的疑问是如何在spring Boot 3和spring webflux中使用spring security处理Oauth和非Oauth授权?

bjp0bcyl

bjp0bcyl1#

从注解中推断,您的遗留系统似乎很容易使用内省集成到OAuth2解决方案中:使用旧的user-info端点来内省不透明令牌。
也就是说,您至少有两种配置资源服务器的选项:

  • 创建单个安全过滤器链,其中自定义身份验证管理器解析器根据授权头格式决定使用JWT解码器或内省
  • 为每种授权类型创建两个单独的安全过滤器链,其中包含安全匹配器(一个用于JWT访问令牌,另一个用于要内省的遗留令牌)

在这两种情况下,“遗留”令牌的配置将是相当standard configuration for resource server with introspection(在Spring的文档中称为“不透明令牌”,即使您可以内省JWT),使用自定义内省器将令牌提交给您在评论中提到的user-info端点。
第二个选项中的securityMatcher可能比第一个选项中的AuthenticationManagerResolver更容易编写。您可以从这个安全匹配器中获得灵感(当然,条件对您来说不会相同,因为您可能匹配的是bearer模式,而不是basic字符串)。

相关问题