Spring Security: сопоставление заявок OAuth2 с ролями для защиты конечных точек сервера ресурсов - PullRequest
2 голосов
/ 02 октября 2019

Я настраиваю 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";
    }
}
...