0

次の 3 つのマイクロサービスが用意されています

  • 構成サーバー
  • MongoDB 参照リンクを使用する認証サーバー。プロジェクトを 1.2.4 から 1.3.3 に正常に移行しました
  • ユーザーサービス。Rest コントローラーと 3 つの Get メソッドを備えたリソース サーバー (それぞれ ADMIN、MERCHANT、CONSUMER 用)

ユーザーの役割に基づいて、REST コントローラーの GET メソッドへのアクセスを制限しようとしています。リソース構成は次のとおりです。

 @Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    @Override 
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers(HttpMethod.GET, "/**").hasAuthority("ROLE_ADMIN")
            .anyRequest()
                .authenticated();
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
         resources.resourceId("admin-api");
    }
}

テストするために、ロール ADMIN を除くすべてのユーザーのユーザー サービスをロックしようとしています。ただし、401 Access Denied が表示されます。同じ結果で hasRole("ADMIN") も試しました。その承認基準を削除すると、ユーザーは正しく認証されます(間違ったアクセストークンを受け入れません)。認証サーバーのuserInfoUriからのレスポンスは以下の通り

{
  "details": {
    "remoteAddress": "0:0:0:0:0:0:0:1",
    "sessionId": null,
    "tokenValue": "a4244b33-80b2-48db-909d-f8aaaaf45985",
    "tokenType": "Bearer",
    "decodedDetails": null
  },
  "authorities": [
    {
      "authority": "ROLE_ADMIN"
    }
  ],
  "authenticated": true,
  "userAuthentication": {
    "details": null,
    "authorities": [
      {
        "authority": "ROLE_ADMIN"
      }
    ],
    "authenticated": true,
    "principal": "admin@ikarma.com",
    "credentials": null,
    "client": false,
    "name": "admin@ikarma.com"
  },
  "credentials": "",
  "clientOnly": false,
  "oauth2Request": {
    "clientId": "admin-web",
    "scope": [
      "trust",
      "read",
      "write"
    ],
    "requestParameters": {
      "grant_type": "password",
      "username": "admin@ikarma.com"
    },
    "resourceIds": null,
    "authorities": [],
    "approved": true,
    "refresh": false,
    "redirectUri": null,
    "responseTypes": [],
    "extensions": {},
    "refreshTokenRequest": null,
    "grantType": "password"
  },
  "principal": "admin@ikarma.com",
  "name": "admin@ikarma.com"
}

役割ベースの承認が機能しない理由がわかりません。どんな助けでも親切に感謝します。

4

2 に答える 2