首页 > 解决方案 > 在 Spring Security 中替换 AuthorizationServerConfigurerAdapter 的良好参考

问题描述

我对 Spring Security 很陌生,并且有一个关于将 OAuth2 迁移到 Spring Security 5.2+ 的问题。

我们的团队正在清理 Spring Security 中的技术债务,并意识到 Spring Security OAuth2 组件已被弃用并作为 Spring Security 5.2 或更高版本的一部分被替换。

我目前正在用 Spring Security 5.3.3 中新引入的 API 替换已弃用的 API,并坚持替换AuthorizationServerConfigurerAdapter。尝试在 WebSecurityConfigurerAdapter 中找到一个很好的示例或等效行为,但运气不佳。

我想知道是否有任何好的参考可以用新的 API 替换已弃用的 API。我感兴趣的是以下接口:

TokenStore TokenEnhancer TokenConverter

为了谈论这种行为,我想通过 /oauth/token 使用基本身份验证创建具有 JWT 格式的 OAuth 令牌。

如果有人能给我好的建议或方向,我将不胜感激。

提前致谢!

标签: javaspringspring-bootspring-securityoauth-2.0

解决方案


其实我自己会回答我的问题。

我为替换 AuthorizationServer 所做的是使用过滤器。

我添加了自己的过滤器,命名为 OauthAuthenticationFilter,它扩展了 UsernamePasswordAuthenticationFilter,将端点覆盖为“oauth/token”,并将其添加到 WebSecurityConfig 中的 httpSecurity。所以详细步骤,

  1. 创建一个类 OauthAuthenticationFilter 扩展 UsernamePasswordAuthenticationFilter
  2. 覆盖 OauthAuthenticationFilter 中的尝试身份验证,创建身份验证并将其传递给 authenticationManager.authenticate()
  3. 覆盖 OauthAuthenticationFilter 中的successfulAuthentication,创建承载令牌,将其添加到响应头“Authorization”中,并将其写入 HTTP 响应
  4. 在 WebSecurityConfig 中配置 authorizeRequests。配置 oauth2ResourceServer、jwtAuthenticationConverter 和 jwtDecoder。
  5. 在 WebSecurityConfig 中创建 OauthAuthenticationFilter 的实例,在 setRequiresAuthenticationRequestMatcher 中将端点覆盖为“/oauth/token”,并将过滤器添加到 httpSecurity

通过这样做,我们可以安全地删除旧的 AuthorizationServer,将 spring 安全性提升到 5.3+ 并等待新的 AuthorizationServer 包发布: https ://github.com/spring-projects-experimental/spring-authorization-server


推荐阅读