2016-09-13 22 views
5

私はSpringアプリケーションを持っています - ではありません。 Spring Bootアプリケーション - Spring Securityを使って保護されたOAuth2としてAPIのセクションを宣言しようとしています。私の許可と一般的なリソースアクセス設定は、XMLでhttp要素を定義するとうまくいきますが、ResourceServerConfigureAdapter#configure(HttpSecurity)を使用してリソースアクセスブロックを実装しようとすると@EnableResourceServerなどで完了します。configureメソッドは決して起動しません)。以下のJavaの設定例:Spring Security OAuth Java Config

 @Override 
     public void configure(ResourceServerSecurityConfigurer resources) throws Exception { 
      resources.resourceId("oauth2/control"); 
     } 

     @Override 
     public void configure(HttpSecurity http) throws Exception { 
      http.antMatcher("/api/**") 
       .authorizeRequests().anyRequest().hasRole("OAUTH_USER").and() 
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() 
       // before=PRE_AUTH_FILTER 
       .addFilterBefore(oAuth2AuthenticationProcessingFilter, AbstractPreAuthenticatedProcessingFilter.class) 
       .csrf().disable() 
       .anonymous().disable() 
       .exceptionHandling() 
       .accessDeniedHandler(oAuth2AccessDeniedHandler) 
       .authenticationEntryPoint(loginUrlAuthenticationEntryPoint); 
     } 

私は、設定を行うにはいくつかの異なる方法を宣言しましたが、ダイスはありません。すなわち、私は最上位レベル@Configurationを延長してResourceServerConfigurerAdapterを返し、を返すbeanメソッドをDave Syer's exampleのように試みました。私はまた、適切な豆の注文を明示的にOrdered.HIGHEST_PRECEDENCEに設定しようとしました。

アプリケーションのレガシーセキュリティコンフィグレーションのほとんどは、上記のようなXML要素によって定義されていることに注意することは非常に重要です。私の設定に関する別の可能性のある赤い旗 - トークンのエンドポイントを基本認証のために認証するためにclient_id:client_secretトークンのエンドポイントを認証するためのバニラと「正しい」方法のため、私は自分でBasicAuthFilter(ProviderManager(DaoAuthProvider(ClientUserDetailsService(clientDetailsService)))))を結線しなければなりませんでした。 dはバネの設定をデフォルトにするだけです。

いずれにしても、状況によってはResourceServerConfigureAdapter#configure(HttpSecurity)を発砲することはできません。私の進行の理論は、次のとおりです。前述のXML HTTPブロックについて

  • 何か

    は、これまでにも、これは単に春ブーツのみの機能です

  • と呼ばれているから、私の configure方法を妨げている - 私が見てきたが、その効果が出る言語はありません

  • 私はアプリケーションの文脈で何らかのオブジェクトがまっすぐに上がっています(私の仕事の注釈は、明らかに@Configuration@Beanですが、です,@EnableAuthenticationServerおよび@EnableResourceServer)。

  • 私は構成エラー(duh)を行いました。

    @Configuration 
    @EnableWebSecurity 
    @EnableResourceServer 
    public class OAuth2Configuration { 
        ... etc ... 
    
        @Bean 
        public ResourceServerConfiguration adminResources() { 
         // copped from https://github.com/spring-projects/spring-security-oauth/tree/master/tests/annotation/multi 
         ResourceServerConfiguration resource = new ResourceServerConfiguration() { 
          public void setConfigurers(List<ResourceServerConfigurer> configurers) { 
           super.setConfigurers(configurers); 
          } 
         }; 
    
         resource.setConfigurers(Collections.singletonList(new ResourceServerConfigurerAdapter() { 
    
          @Override 
          public void configure(ResourceServerSecurityConfigurer resources) throws Exception { 
           resources.resourceId("oauth2/control"); 
          } 
    
          @Override 
          public void configure(HttpSecurity http) throws Exception { 
           http.antMatcher("/api/**") 
            .authorizeRequests().anyRequest().hasRole("OAUTH_USER").and() 
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() 
            // before=PRE_AUTH_FILTER 
            .addFilterBefore(oAuth2AuthenticationProcessingFilter, AbstractPreAuthenticatedProcessingFilter.class) 
            .csrf().disable() 
            .anonymous().disable() 
            .exceptionHandling() 
            .accessDeniedHandler(oAuth2AccessDeniedHandler) 
            .authenticationEntryPoint(loginUrlAuthenticationEntryPoint); 
          } 
    
         })); 
         resource.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    
         return resource; 
        } 
    
        @Configuration 
        @EnableAuthorizationServer 
        public static class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { 
         ... etc ... 
        } 
    } 
    

    Analogogous がピックアップされること<http>設定:

任意の実施例は、はるかに 以下

例のOAuth2構成クラス(いくつかの異なる反復のうちの1つ)

を理解されるであろう
<sec:http pattern="/api/**" create-session="stateless" 
      entry-point-ref="loginUrlAuthenticationEntryPoint"> 
    <sec:anonymous enabled="false" /> 
    <sec:csrf disabled="true"/> <!-- csrf tokens don't make sense for a 3rd party API --> 
    <sec:custom-filter ref="oauth2ProcessingFilter" before="PRE_AUTH_FILTER"/> 
    <sec:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    <sec:intercept-url pattern="/api/**" access="hasRole('OAUTH_USER')" /> 
</sec:http> 

答えて

1

Javaベースのセキュリティ構成とXMLベースのセキュリティ構成の両方を同時に使用している場合、XMLベースのみが選択されます。 XMLベースのすべてのHTTPセキュリティ設定を無効にしたりコメントアウトしたりしてみましたか?Javaベースがアクティブになるかどうかを確認しましたか?

私は以前も同様の問題がありました。私はSpring Security Gitterチャンネルで助けを求めましたが、何らかの調査も行いました。下記を参照してください。

enter image description here

+0

推測する必要があります。ありがとう、ソフィア! – jwilner

関連する問題