Реализация авторизации с использованием keycloak, после извлечения токена RPT, как сопоставить имя ресурса с контроллерами и неавторизовать пользователя - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над Play Framework Rest API, который использует keycloak для аутентификации, и теперь, продлевая авторизацию, я извлек токен RPT и сохранил права доступа на основе имени ресурса.Но теперь я понятия не имею, как сопоставить мои контроллеры с именем ресурса и ограничить пользователя в использовании определенных функций, которые могут использоваться только администратором или другой ролью.Структура разрешения:

"authorization": {
    "permissions": [
      {
        "rsid": "4bxxxxxx-xxxxx-xxxxx-xxxx-xxxxxxx",
        "rsname": "Default Resource"
      },
      {
        "rsid": "8xxxxxx-xxxxx-xxxxx-xxxx-xxxxxxx",
        "rsname": "admin_res"
      },
      {
        "rsid": "cxxxxxx-xxxxx-xxxxx-xxxx-xxxxxxx",
        "rsname": "superAdmin_res"
      }
    ]
  }, 

И я сохраняю все имя rsname в списке и сохраняю локально в сеансе.

Теперь я просто хочу управлять вызовами API на основе ресурсаимя и ограничение вызовов контроллера.

У меня есть KeyCloakSessionAction, который распространяется на action.simple, так как я могу передать вместе с ним детали аутентификации и ограничить некоторые контроллеры.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я нашел гораздо лучшее решение для этого, используя пользовательскую аннотацию, которая будет ограничивать определенный API, если у пользователя нет доступа к этим ресурсам.

Пожалуйста, обратитесь сюда: https://www.javatpoint.com/custom-annotation

И исходя из этого, вы можете установить значение в качестве имени ресурса и проверять каждый раз, когда пользователь вызывает API.

Например,@ Авторизация (ресурс по умолчанию) более

@Authorization(Default Resource)
public class getPassword(){
...
...
...
}

Добавьте эту строку перед каждым вызовом API.Здесь только пользователям с ресурсом по умолчанию в их сеансе будет разрешено успешно получить пароль.

0 голосов
/ 14 февраля 2019

Не уверен, что если вы используете какой-либо адаптер Keycloak, если вы реализуете его для playframework, вам не нужно хранить разрешения, вы можете напрямую получить общее решение от конечной точки токена примерно так:

curl -X POST 
  http://localhost:8080/auth/realms/${realm}/protocol/openid-connect/token 
  -H "Authorization: Bearer ${access_token}" 
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" 
  --data "audience={resource_server_client_id}" 
  --data "permission=Resource A#Scope A" 
  --data "response_mode=decision"

Ответбудет

 {
   'result': true
  }

подробности можно получить из клавиатуры документация

...