Обновите полномочия в объекте аутентификации после аутентификации пользователя и перед его авторизацией для конечной точки. - PullRequest
1 голос
/ 18 июня 2020

У меня есть ситуация, когда я должен авторизовать пользователя на определенный путь (конечную точку) в зависимости от его роли. Проблема: после аутентификации пользователя я вижу пустой набор прав доступа в объекте аутентификации (который используется фильтром авторизации для определения доступа пользователя).

Я новичок в системе безопасности Spring и мне понадобится помощь

Справочная информация: У нас есть сервер авторизации, реализованный в организации, который использует oauth2 и позволяет нам выполнять единый вход. SSO происходит во внешнем интерфейсе, который получает токен от сервера авторизации и встраивает его в каждый запрос, отправляемый на мой сервер. Теперь мой сервер декодирует токен и аутентифицирует пользователя. в заявлении пользователя нет информации о полномочиях, и мне не разрешено вносить какие-либо изменения кода на моем сервере авторизации ..

Что я ищу: после аутентификации пользователя и до того, как он перейдет к авторизации (я Я использую фильтры в своей конфигурации веб-безопасности) Я хочу позвонить в БД и получить соответствующие роли пользователя и сохранить их в моем объекте аутентификации, чтобы теперь полномочия обновлены, пользователь будет авторизован для конечной точки.

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете создать SecurityService и вызвать его из @PreAuthorize аннотации

@GetMapping()
@PreAuthorize("securityService.hasRole('ADMIN', authentication.principal.username)")
public String getData() {
  return "response";
}

И вызвать авторизованный сервер из SecurityService с шаблоном отдыха, например:

public class SecurityService {

  public boolean hasRole(String role, String username) {
    String role = restTemplate.getRoleByUserName...;
    // check role 
    return false/true
  } 
}
...