我想将Zuul代理同时作为SSO @EnableOAuth2Sso
和资源服务器@EnableResourceServer
。
经过一番研究后,我在stackoverflow和github上这个可爱的uaa-behind-zuul-sample项目中找到了很多类似的问题。
application.yml
uaa-service
删除了用户名和密码属性
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER")
.and()
.withUser("admin").password("admin").roles("ADMIN");
// Disables this line below:
// auth.parentAuthenticationManager(authenticationManager);
}
admin
和user
凭据在浏览器中工作正常。所以那里的授权很好。 但来自其他客户的电话,如
curl --insecure -H "Authorization: Basic $(echo -n 'acme:acmesecret' | base64)" http://localhost:8765/uaa/oauth/token -d grant_type=password -d username=admin -d password=admin -v
结果
{"error":"invalid_grant","error_description":"Bad credentials"}
使用日志消息:
o.s.s.a.dao.DaoAuthenticationProvider : User 'admin' not found
。
user
和password
也是如此。 如果我将用户定义在application.yml
。
问题:
是否可以与WebSecurityAdapter
共享AuthorizationServerConfigurerAdapter
的身份验证管理器?那么它们的配置方式是否相同?
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
// TODO here: use the authenticationManager from the other class
.authenticationManager(authenticationManager)
.accessTokenConverter(jwtAccessTokenConverter());
}
我将上面提到的项目与一个单独的分支https://github.com/mavogel/uaa-behind-zuul-sample/tree/integration-resource-server分开,可以通过运行./build_run.sh
答案 0 :(得分:0)
解决方案是
从LoginConfiguration
@覆盖 @豆 public AuthenticationManager authenticationManagerBean()throws Exception { return super.authenticationManagerBean(); }
在AuthorizationServerConfiguration
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
ROLE_ADMIN
可以访问DummyServiceApplication
ACCESS_DENIED
:user
将PiggyMetrics项目带到解决方案的道具