Spring Security Expression Baed Контроль доступа с JwtAuthenticationToken - PullRequest
0 голосов
/ 14 июля 2020

Я работаю над сервисом RESTful, который для безопасности использует spring-boot-starter-oauth2-resource-server. У него есть некоторые сложные требования авторизации конечных точек, которые включают решения, основанные не только на ролях, но и на других утверждениях в JWT-подобном местоположении. Таким образом, hasRole конфигурации HttpSecurity недостаточно.

Есть ли способ использовать значения из JwtAuthenticationToken с контролем доступа baed выражения Sprng Security и методом доступа HttpSecurity (атрибут String)? Или есть какой-то другой способ интегрировать различные заявки в авторизацию конечной точки?

Любые советы будут очень признательны

1 Ответ

0 голосов
/ 14 июля 2020

У вас есть доступ к объекту аутентификации с помощью SPEL, поэтому такие выражения, как:

authentication.token.claims ['primary_username'] == ......

Я использовал это в методах: например,

PreAuthorize("#createSupportQueryRequest.username == authentication.token.claims['preferred_username']")
public void createNewQuery(@RequestBody CreateSupportQueryRequest createSupportQueryRequest) {

Но он также должен работать в методе .access.

Для более сложных вещей вы можете ссылаться на класс bean-компонента, который находится в вашем контексте, в выражениях, используя @ . например,

.access("@isPortfolioOwnerOrAdmin.check()")

Это вызовет метод проверки в классе IsPortfolioOwnerOrAdmin.

Ваш класс bean-компонента имеет доступ к токену через SecurityConect, и вы можете выполнить сложную проверку logi c там и вернуть либо истину, либо ложь.

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