У меня есть следующие 3 микросервиса
- Сервер конфигурации
- Сервер аутентификации с использованием MongoDB со ссылкой на ссылку. Я успешно перенес проект с 1.2.4 на 1.3.3.
- Служба пользователей. Rest Controller и Resource Server с 3 методами Get (каждый для ADMIN, MERCHANT и CONSUMER).
Я хочу ограничить доступ к методам GET контроллера REST в зависимости от роли пользователя. Конфигурация ресурса выглядит следующим образом
@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 Отказано в доступе. Я также пробовал 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": "[email protected]",
"credentials": null,
"client": false,
"name": "[email protected]"
},
"credentials": "",
"clientOnly": false,
"oauth2Request": {
"clientId": "admin-web",
"scope": [
"trust",
"read",
"write"
],
"requestParameters": {
"grant_type": "password",
"username": "[email protected]"
},
"resourceIds": null,
"authorities": [],
"approved": true,
"refresh": false,
"redirectUri": null,
"responseTypes": [],
"extensions": {},
"refreshTokenRequest": null,
"grantType": "password"
},
"principal": "[email protected]",
"name": "[email protected]"
}
Я не могу понять, почему авторизация на основе ролей не работает. Любая помощь приветствуется.