По какому принципу работает SSO и распределения прав (на примере keycloak)?

Стоит задача реализовать технологию единого входа на базе Keycloak. Прошу помощи разобраться с обработкой прав и ролей приложением (клиентом). Гугл не дал четкого представления о логике работы. Буду благодарен любым комментариям.
Как это вижу я упрощенно:
1. Приложение(клиент) посылает запрос в Keycloak c id клиента и учетными данными пользователя, выполняющего вход.
2. В случае корректной авторизации на сервере единого входа клиент получает ответ в виде token, refresh token и другой информации. Возможно среди них будет и username пользователя, его email и т.д, но вроде как это после еще одного запроса.
3. Далее как раз суть моего вопроса - непонятно, что делать с этими данными, точнее где управлять доступами к разным частям приложения. Допустим, роль admin имеет право просматривать страницу "/users", в то время как роль guest нет. Где именно должна быть обработка разрешений для конкретной роли: на бэкэнде или именно на Keycloak? Ну или как-то вообще по-другому.
4. Надо ли как-то прошедшего авторизацию в keycloak пользователя сохранять в таблицу user приложения?
Поясните плиз где неправильно думаю и если не сложно, то как надо в паре слов. Спасибо заранее)
  • Вопрос задан
  • 470 просмотров
Пригласить эксперта
Ответы на вопрос 1
rukbrook
@rukbrook
  1. да, вам нужно отправить запрос, содержащий реалм, идентификатор клиента в этом реалме и данные достаточные для получения токена (к примеру grant_type="password", username, password, client_secret)
  2. да, он получает access_token и refresh_token. Вы можете декодировать токен и посмотреть что в нем храниться и вытащить данные которые вам нужны к примеру в нем хранятся роли и username, при этом можно положить туда дополнительную инфу
  3. проверка разрешений на беке, для простоты ищете что-то на подобии spring-security, но для php, который будет проверять ваш токен и роли в нем, и в зависимости от роли будете отдавать либо 200 либо 401 на запрос к которому у пользователя нет доступа
  4. если вам не нужно связать какие-то данные вашего приложения с идентификатором пользователя в кейклоке, то не нужно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы