2016-07-08 4 views
0

ZuulプロキシでRESTApiを呼び出そうとしているアプリケーションがあります。zuul:ベアラ認証が受け入れられません。

アプリケーションには、OAuth2サーバーによって指定された有効なjwtトークンがあります。 私はヘッダーにベアラ認可のトークンを持っていましたが、zuulサーバーから(このリソースにアクセスするには完全な認証が必要です)の応答があります。

マイzuul設定:

eureka: 
    client: 
     registerWithEureka: true 
     fetchRegistry: true 
     serviceUrl: 
      defaultZone: http://localhost:8761/eureka/ 
    instance: 
     leaseRenewalIntervalInSeconds: 10 
     statusPageUrlPath: ${management.context_path}/info 
     healthCheckUrlPath: ${management.context_path}/health 

server: 
    port: 80 
management: 
    port: 81 
    context_path: /admin 

security: 
    sessions: stateless 
     # Disable Spring Boot basic authentication 
    basic: 
     enabled: false 

endpoints: 
    restart: 
     enabled: true 
    shutdown: 
     enabled: true 
    health: 
     sensitive: false 

# The OAuth2 server definition that would be used to send the authorization requests to 
authserver: 
    hostname: localhost 
    port: 9000 
    contextPath: uaa 

spring: 
    oauth2: 
     resource: 
      userInfoUri: http://${authserver.hostname}:${authserver.port}/${authserver.contextPath}/user 
      jwt.key-uri: http://${authserver.hostname}:${authserver.port}/${authserver.contextPath}/oauth/token_key 
      preferTokenInfo: false 

    output: 
     ansi: 
      enabled: ALWAYS 

メインzuulファイル:

@SpringBootApplication 
@EnableZuulProxy 
@EnableResourceServer 
public class ZuulApplication { 

    public static void main(String[] args) { 
     new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args); 
    } 
} 

zuulセキュリティ設定ファイル:

@Configuration 
public class WebSecurityConfiguration extends ResourceServerConfigurerAdapter { 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http 
       .csrf().disable() 
       .exceptionHandling() 
       .and() 
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
       .and() 
       .authorizeRequests() 
        .antMatchers("/admin/trace").permitAll() 
        .anyRequest().authenticated() 
       ; 
    } 

} 

restApiの呼び出し:

 final String access_token = (String) httpSession.getAttribute(OAuthComponent.HTTPSESSION_OAUTH_ACCESS_TOKEN); 

     final MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); 
     headers.add("Authorization", "Bearer " + access_token); 
     headers.add("Content-Type", "application/json"); 

     final HttpEntity<Object> request = new HttpEntity<>(searchParams,headers); 

     return restOperations.postForObject("http://localhost/ms-arbre-recherche/utilisateur/search", request, Object.class); 

私は春の雲Brixton SR2と春のブート1.4.0RC1を使用します。

+0

あなたが持っているgitの上の任意の例を持っていますかそれを見て? – carlitos081

+0

申し訳ありませんが、例はありません。 – BokC

答えて

1

これは私のセキュリティの設定である:私は別のやっている

@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(); 
    } 
} 

主要なものは、私がOauthRestTemplateを使用していますということです。

また、あなたはあなたのポンポンでこれを持っている(または依存)ことを確認する必要があり
@Configuration 
public class ActivationApiEndpointConfig { 

    @Bean 
    protected OAuth2ProtectedResourceDetails resource() { 

     ClientCredentialsResourceDetails resource = new ClientCredentialsResourceDetails(); 



    resource 

.setAccessTokenUri("http://cdpsit04is01.eng.rr.com:8888/oauth/token"); 

     resource.setClientId("clientid"); 
     resource.setClientSecret("clientsecret"); 
     resource.setGrantType("client_credentials"); 
     resource.setScope(Arrays.asList("write", "read")); 
     resource.setAuthenticationScheme(AuthenticationScheme.header); 

     return resource; 
    } 

    @Bean 
    public OAuth2RestOperations applicationApiTemplate() { 
     AccessTokenRequest atr = new DefaultAccessTokenRequest(); 

     return new OAuth2RestTemplate(resource(), new DefaultOAuth2ClientContext(atr)); 
    } 

} 

そして

String returnValue = applicationApiTemplate.getForObject(uri.expand(pathVariables).toUri(), String.class); 

<dependency> 
    <groupId>org.springframework.security.oauth</groupId> 
    <artifactId>spring-security-oauth2</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-jwt</artifactId> 
</dependency> 
関連する問題