次の 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"
}
役割ベースの承認が機能しない理由がわかりません。どんな助けでも親切に感謝します。