【发布时间】:2017-10-02 04:29:05
【问题描述】:
Spring Boot,安全 OAuth2 实现,默认令牌端点 (/oauht/token) 工作正常。但是,当我在 /oauth/http/token 向新端点发送请求时,由于以下原因,它会抛出 Bad Credentials:
FilterChainProxy 触发大约 12 个过滤器,其中一个是 BasicAuthenticationFilter。它使用DaoAuthenticationProvider 类的UserDetailsService 来获取用户数据。对于客户端身份验证,这应该是ClientDetailsService,但由于某种原因,这始终是UserDetailsService,并且由于此客户端凭据转到UserRepository 并失败。这个类确实可以正确初始化,因为默认 /oauth/token 可以正常工作。
我尝试在BasicAuthenticationFilter 中注入现有的身份验证管理器,并将其添加为ResourceServerConfigurerAdapter 中的过滤器,但这没有任何区别。它确实将身份验证管理器提供程序从AnonymousAuthenticationProvider 更改为DaoAuthenticationProvider,但UserDetailsService 仍然是UserDetails。
在/oauth/http/token 请求,这不起作用。代码与org.springframework.security.oauth2.provider.endpoint.TokenEndpoint的postAccessToken()几乎相同
在上面的屏幕截图中,我们可以看到 userDetailsService 是 UserDetailsServiceImpl 并且由于请求标头中存在此客户端详细信息,因为 Basic dGVzdDpwYXNzd29yZA== 将进入用户存储库并在用户表中检查,而不是转到客户端存储库并在客户端表中检查。
在/oauth/token 请求,这可行
【问题讨论】:
标签: spring spring-boot spring-security oauth