我使用@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);
}
@RequestMapping(value = "/userinfo", produces = MediaType.APPLICATION_JSON_VALUE)
public User getInfo(OAuth2Authentication auth) {
return service.getUser(auth); // Returns User Object
}
资源服务器尚未使用@EnableResourceServer
进行注释。如果是,则转发的请求将导致Invalid access token
错误消息。
答案 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
关于此的文件非常少。所以它真的只是劈开它,直到我能让它通过令牌。