Я настраиваю Resource Server с Spring Boot и для защиты конечных точек, которые я использую OAuth2, предоставленный Spring Security. Поэтому я использую Spring Boot 2.1.8.RELEASE
, который, например, использует Spring Security 5.1.6.RELEASE
.
. В качестве сервера авторизации я использую Keycloak. Все процессы между аутентификацией, выдачей токенов доступа и проверкой токенов на сервере ресурсов работают правильно. Вот пример выпущенного и декодированного токена (некоторые части которого обрезаны):
{
"jti": "5df54cac-8b06-4d36-b642-186bbd647fbf",
"exp": 1570048999,
"aud": [
"myservice",
"account"
],
"azp": "myservice",
"realm_access": {
"roles": [
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"myservice": {
"roles": [
"ROLE_user",
"ROLE_admin"
]
},
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
"scope": "openid email offline_access microprofile-jwt profile address phone",
}
Как настроить Spring Security на использование информации в токене доступа для обеспечения условной авторизации для разных конечных точек?
В конечном итоге я хочу написать такой контроллер:
@RestController
public class Controller {
@Secured("ROLE_user")
@GetMapping("userinfo")
public String userinfo() {
return "not too sensitive action";
}
@Secured("ROLE_admin")
@GetMapping("administration")
public String administration() {
return "TOOOO sensitive action";
}
}