2

最近、Spring Cloud Dalstonにアップグレードしました。これはSpringブート1.5.1を意味し、oauth2スコープをもうチェックして管理エンドポイントを保護できません。以前はSpring Cloud Camdenで働いていました。ロールの代わりにoauth2スコープを使用してバネ・アクチュエータ管理エンドポイントを確保する

これは前に働いていた設定です:

@Configuration 
public class SecurityConfiguration extends ResourceServerConfigurerAdapter { 

    @Value("${management.context-path}") 
    private String managementContextPath; 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
       // some paths I don't want to secure at all 
       .antMatchers("/path1/**", "/path2/**").permitAll() 
       // access to health endpoint is open to anyone 
       .antMatchers(HttpMethod.GET, managementContextPath + "/health").permitAll() 
       // but app.admin scope is necessary for other management endpoints 
       .antMatchers(managementContextPath + "/**").access("#oauth2.hasScope('my-super-scope')") // 
       // And we make sure the user is authenticated for all the other cases 
       .anyRequest().authenticated(); 
    } 
} 

そして、これは設定の重要な部分である:

security: 
    oauth2: 
    client: 
     clientId: a-client 
     clientSecret: the-client-password 
    resource: 
     tokenInfoUri: http://my-spring-oauth2-provider/oauth/check_token 

management: 
    context-path: /my-context 
    security: 
    enabled: true 
endpoints: 
    health: 
    sensitive: false 

私は/my-context/refreshに投稿しようとすると、私はHTTP 401「のフルを取得有効なOAuth2トークンを付与しても、「認証が必要です」

ログを見ると、私の要求は匿名とみなされ、Fi lterChainProxyログで、OAuth2AuthenticationProcessingFilterが呼び出されていないことがわかりました。 I found that I could change the oauth2 resource filter orderを少し掘り下げたので、私はそれを試しましたが、今はOAuth2認証を受けています。

ハム、いいえ、今私はAccess is denied. User must have one of the these roles: ACTUATORエラーがあります。

私は、管理セキュリティを無効にすること(ただし、私のルールは適用されず、アクセスは誰にでも公開されています)、@Order(変更なし)、さらにはreading and applying the documentation言う:

アプリケーションのアクセスルールを上書きする形 WebSecurityConfigurerAdapterの@Beanを追加し、 上書きするために、アクチュエータのアクセスルールをしたい、または @Orderない場合は @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)を使用します(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)する場合 が欲しいアクチュエータのアクセスルールを無効にします。

しかし、これはエラーを変更しませんでした:User must have one of these roles: ACTUATOR

誰もが回避策/アイデアを持っていますか?


アップデート:、私もZuulを使用していますので、私は最終的に私は必要なエンドポイント(私の場合は、クラウドバスリフレッシュ)に固有のzuulのルートを作成し、それ以外の場合は露光されなかった他のバックエンドサービスで保護されていませんoauth2でそのzuulルートを保護しました。

私はここにこの質問を残していますが、誰かが回避策を見つけた場合は、役に立つかもしれません。

+0

これで運がいいですか?私も同様の問題に直面しています。 –

+0

悲しいことに、私はDalstonを望んでいませんでした.RC1はこれを修正しますが、運はありません。私はおそらくもう一度それをすぐにチェックしますが、その間に何かを見つけたら、私は本当に黙っています:) –

答えて

1

おそらくキャプテン明白ですが、http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.htmlを参照してください。 management.security.rolesでロールをオーバーライドして、Oauth2資格情報の役割を追加するだけです。

+1

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに入れて、参照。リンクされたページが変更された場合、[リンクのみ](https://meta.stackexchange.com/tags/link-only-answers/info)の回答が無効になることがあります。 – mmichael

+0

ありがとうございます。しかし、#oauth2.hasScope( 'my-super-scope')のように、役割をチェックするのではなく、 –

関連する問題