В микросервисной архитектуре мы используем токены JWT из keycloak. Теперь мы хотели бы получить второй токен доступа с меньшими правами (меньше требований/меньше ролей). Пример использования: новый токен доступа должен предоставлять своему владельцу доступ только к одному документу в хранилище документов. Почему? Чтобы ограничить ущерб, который может нанести кто-то, если он сможет украсть этот токен.
В идеале мы могли бы получить этот второй токен с помощью специального вызова refresh_token (пользователь, у которого есть токен обновления, имеет право получить токен полного доступа, поэтому он также должен иметь возможность получить токен частичного доступа). Как мы могли это сделать?
Использование областей, похоже, не работает: список заданных областей оценивается только при входе в систему (поэтому в момент обновления токена я не могу принять список областей).
Я также пытался понять https://www.keycloak.org/docs/latest/authorization_services/index.html#_service_overview или RPT. Но, к сожалению, мне не хватает документации (и мои попытки не увенчались успехом).
Есть ли другие идеи? Или, может быть, хотя бы пример, показывающий, как это сделать?
Позднее отредактируйте, чтобы уточнить мой вопрос о RPT: https://www.keycloak.org/docs/latest/authorization_services/index.html#_service_overview говорит:
... Службы авторизации Keycloak предоставляют расширения для OAuth2, позволяющие выдавать токены доступа на основе обработки всех политик, связанных с запрашиваемыми ресурсами или областями. Это означает, что серверы ресурсов могут обеспечивать доступ к своим защищенным ресурсам на основе разрешений, предоставленных сервером и удерживаемых токеном доступа. В службах авторизации Keycloak токен доступа с разрешениями называется токеном запрашивающей стороны или сокращенно RPT.
Можно ли использовать такой токен доступа с разрешениями для нашей цели?
В моих экспериментах я мог получить токен с помощью grant_type=urn:ietf:params:oauth:grant-type:uma-ticket . Но были некоторые проблемы:
Мне пришлось изменить некоторые настройки в keycloak, чтобы включить разрешения (до того, как он сказал бы «Клиент не поддерживает разрешения»). После того, как я внес эти изменения, мой обычный вызов входа в систему больше не работал (я мог проверить, пока мой токен был еще действителен). Мне пришлось поцарапать конфигурацию keycloak, чтобы продолжить работу.
Я не совсем понимаю модель разрешений, которую следует использовать для этой функции.
Был бы полезен сквозной пример (те, что в документации Keycloak, немного абстрактны).