Spring Zuul Eureka安全认证从Zuul获取用户信息

时间:2017-07-17 15:12:43

标签: spring spring-mvc spring-boot spring-security spring-oauth2

我使用@EnableOAuth2Sso在Zuul服务器上使用第三方认证服务器对用户进行身份验证。我需要将用户信息从Zuul传递到路由服务器。我已设置请求端点/userinfo以从第三方返回用户信息的展平版本的jsonified表示。如何将此userinfo获取到其中一个资源服务器?

到目前为止我尝试了什么

我已尝试使用@LoadBalanced @Bean RestTemplate提出请求了。但是,我被重定向到第三方进行授权。 sensitive-headers设置为none。我已经检查过哪些标题:

["upgrade-insecure-requests","user-agent","accept","accept-language","cookie",
"authorization","x-forwarded-host","x-forwarded-proto",
"x-forwarded-prefix","x-forwarded-port","x-forwarded-for","accept-encoding",
"content-length", "host","connection"]

所以,然后我尝试使用@LoadBalanced @Bean OAuth2RestTemplate。我必须设置config security.basic.enabled=false以防止出现身份验证用户登录提示。这会产生UserRedirectRequiredException

资源服务器

@RequestMapping(value = "/test", method = RequestMethod.GET)
    public ResponseEntity<String> test3() {
    return restTemplate.getForEntity("http://zuul-server/userinfo", String.class);
}

Zuul服务器

@RequestMapping(value = "/userinfo", produces = MediaType.APPLICATION_JSON_VALUE)
public User getInfo(OAuth2Authentication auth) {
    return service.getUser(auth); // Returns User Object
}

附加说明

资源服务器尚未使用@EnableResourceServer进行注释。如果是,则转发的请求将导致Invalid access token错误消息。

1 个答案:

答案 0 :(得分:0)

这就是我在我们的系统上传递Oauth2 JWT标记的原因。

@Configuration
@EnableResourceServer
public class JwtSecurityConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/oauth/**").permitAll()
            .antMatchers("/**").hasAuthority("ROLE_API")
            .and()
            .csrf().disable();
    }
   }

您可能需要的配置部分。

services:
  path: /services/**
  serviceId: services
  stripPrefix: false
  sensitiveHeaders: true
auth:
  path: /oauth/**
  serviceId: saapi-auth-server
  stripPrefix: false
  sensitiveHeaders: true

关于此的文件非常少。所以它真的只是劈开它,直到我能让它通过令牌。