Zuul作为OAuth2 AuthServer和ResourceServer:共享AuthenticationManager

时间:2017-01-10 22:24:57

标签: java spring-boot spring-cloud spring-security-oauth2 spring-cloud-netflix

我想将Zuul代理同时作为SSO @EnableOAuth2Sso和资源服务器@EnableResourceServer

经过一番研究后,我在stackoverflow和github上这个可爱的uaa-behind-zuul-sample项目中找到了很多类似的问题。

  1. 我从application.yml
  2. uaa-service删除了用户名和密码属性
  3. 我添加了更多用户进行身份验证并禁用了parentAuthenticationManager
  4. 像这样

    @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);
    }
    
    1. 使用adminuser凭据在浏览器中工作正常。所以那里的授权很好。
    2. 来自其他客户的电话,如 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 founduserpassword也是如此。 如果我将用户定义在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

      轻松设置

1 个答案:

答案 0 :(得分:0)

解决方案是

  1. LoginConfiguration

    公开AuthenticationManager

    @覆盖 @豆 public AuthenticationManager authenticationManagerBean()throws Exception {     return super.authenticationManagerBean(); }

  2. AuthorizationServerConfiguration

  3. 中注入它 像这样

    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;
    
    1. 我还添加了一个受保护的资源,只有[{1}}中的ROLE_ADMIN可以访问DummyServiceApplication ACCESS_DENIED
    2. 像这样

      user

      将PiggyMetrics项目带到解决方案的道具