私は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>
推測する必要があります。ありがとう、ソフィア! – jwilner