java - 在 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 令牌。
如果有人能给我好的建议或方向,我将不胜感激。
提前致谢!
解决方案
其实我自己会回答我的问题。
我为替换 AuthorizationServer 所做的是使用过滤器。
我添加了自己的过滤器,命名为 OauthAuthenticationFilter,它扩展了 UsernamePasswordAuthenticationFilter,将端点覆盖为“oauth/token”,并将其添加到 WebSecurityConfig 中的 httpSecurity。所以详细步骤,
- 创建一个类 OauthAuthenticationFilter 扩展 UsernamePasswordAuthenticationFilter
- 覆盖 OauthAuthenticationFilter 中的尝试身份验证,创建身份验证并将其传递给 authenticationManager.authenticate()
- 覆盖 OauthAuthenticationFilter 中的successfulAuthentication,创建承载令牌,将其添加到响应头“Authorization”中,并将其写入 HTTP 响应
- 在 WebSecurityConfig 中配置 authorizeRequests。配置 oauth2ResourceServer、jwtAuthenticationConverter 和 jwtDecoder。
- 在 WebSecurityConfig 中创建 OauthAuthenticationFilter 的实例,在 setRequiresAuthenticationRequestMatcher 中将端点覆盖为“/oauth/token”,并将过滤器添加到 httpSecurity
通过这样做,我们可以安全地删除旧的 AuthorizationServer,将 spring 安全性提升到 5.3+ 并等待新的 AuthorizationServer 包发布: https ://github.com/spring-projects-experimental/spring-authorization-server
推荐阅读
- java - 无法在使用 Spring 云流绑定器的 Spring Boot 应用程序中检索 KafkaStreams 对象
- xpath - Robotframework - 如何通过相关标签中的文本选择这种类型的单选按钮?
- python - 合并两个或多个具有不同输出大小的 ML 模型
- arrays - 如何使用 Vlookup 或 Index & small 抵消封闭的工作簿替代品
- r - lapply / purrr::map 之类的函数默认允许访问索引?
- laravel - Laravel 5.4 在专用日志文件中记录 404
- wix - 覆盖 CustomActionData WIX 中的值
- php - ajax成功数组括号属性不返回内容
- amazon-s3 - 如何在启动期间阻止我的应用程序填充 S3 暂存目录?
- pdf - poppler pdfunite 无法合并加密的 PDF 文件,如何解除加密?(无需密码即可打开)