Чтение ролей из Azure AD в Spring Boot OAuth2 - PullRequest
0 голосов
/ 03 октября 2018

У меня есть ResourceServer, использующий Spring Boot Oauth2, где у моего контроллера есть следующее:

@RestController
public class Controller {

    @PreAuthorize("hasRole('search_price')")
    @GetMapping
    public String test() {
        return "OK !!";
    }
}

Итак, у меня есть токен, сгенерированный Azure AD, который выполняет эту роль в ваших утверждениях, как показано ниже:

...
"idp": "https://sts.windows.net/xxxxxxx/",
  "oid": "e224xxxxxxxx6faf",
  "roles": [
    "search_price"
  ],
  "sub": "e2240xxxxxxx",
  "tid": "a753xxxxxxxxxx177e575",
...

Когда я пытаюсь поразить эту конечную точку из POSTMAN, я получил: Доступ запрещен.Если я удаляю аннотацию "@PreAuthorize", все работает, но мне это нужно.

Просмотр внутрь DefaultAccessTokenConverter класс, в методе extractAuthentication Я обнаружил следующее:

Collection<? extends GrantedAuthority> authorities = null;
        if (user == null && map.containsKey("authorities")) {
            String[] roles = (String[])((Collection)map.get("authorities")).toArray(new String[0]);
            authorities = AuthorityUtils.createAuthorityList(roles);
        }

Итак, по умолчанию конвертер не читает ROLES заявка, только полномочия и Azure AD не имеют этого последнего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...