我可以使用 Spring Security 的 AbstractAuthenticationProcessingFilter 来处理身份验证作为 /oauth/authorize 请求处理的一部分吗?
Posted
技术标签:
【中文标题】我可以使用 Spring Security 的 AbstractAuthenticationProcessingFilter 来处理身份验证作为 /oauth/authorize 请求处理的一部分吗?【英文标题】:Can I use Spring Security's AbstractAuthenticationProcessingFilter to handle authentication as part of /oauth/authorize request handling? 【发布时间】:2017-11-17 04:49:03 【问题描述】:在我们的应用程序中,我想使用 Spring Security 来实现身份验证过滤,作为对 /oauth/authorize 的请求的一部分。我添加了过滤器和提供程序 - 扩展 org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
- 以提供自定义身份验证。
但是我不知道在实现AuthenticationSuccessHandler#onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
时该怎么做,以便过滤请求不会导致对浏览器的重定向响应 - 而是程序继续到旨在处理请求的org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint#authorize(...)
。
【问题讨论】:
【参考方案1】:是的,这似乎是在到达 Spring 自己的 /oauth/authorize 请求处理程序之前在过滤器链中进行身份验证的有效方法。
在我们的案例中,早期工作设置了“AuthorizationServerEndpointsConfigurer”端点映射,这干扰了我的身份验证成功处理程序向前转发请求的尝试。
所以,我的实现包括一个扩展 AbstractAuthenticationProcessingFilter 的自定义身份验证过滤器,通过 WebSecurityConfigurerAdapter 集成到 Spring 安全过滤器链中,
@Override
protected void configure(HttpSecurity http) throws Exception
http
// ...
.addFilterBefore(
passwordLessAuthenticationFilter(authenticationManager()),
UsernamePasswordAuthenticationFilter.class)
// ...
自定义 PasswordLessAuthenticationFilter 是使用 ant 路径匹配器值构造的,例如“/foo/oauth/授权”。 自定义过滤器被定义为存储对实例 Spring 的 ForwardAuthenticationSuccessHandler 的引用,其转发 url 值为“oauth/authorize”。
【讨论】:
以上是关于我可以使用 Spring Security 的 AbstractAuthenticationProcessingFilter 来处理身份验证作为 /oauth/authorize 请求处理的一部分吗?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security - 多个会话取决于使用情况(登录/httpBasic)