У меня вопрос относительно Keycloak и получения токена доступа.
Наша установка выглядит следующим образом: · пользователи создаются и поддерживаются в Keycloak · ресурсы, политики и разрешения также поддерживаются в Keycloak
Наш вариант использования:
Как стороннее приложение, я хочу получить информацию об авторизации (например, разрешения на основе ресурсов и области действия) для конкретного пользователя, указав только имя пользователя для Keycloak, чтобы я мог разрешить или запретить дальнейшие действия.
Чтобы быть более конкретным: в нашем приложении необходимо проверять каждый запрос к другим службам на основе токена доступа. Но у нас есть только имя пользователя.
Теперь вопрос:
> Как мы можем получить токен доступа для пользователя, зная только его имя?
> Есть ли способ получить токен доступа для такого пользователя?
Ответ 1 · рейтинг 3 · Xtreme Biker
Вы не указываете в своем вопросе, вошел ли текущий пользователь в систему. Вы проверяете конкретные действия пользователя или вместо этого хотите получить роли пользователей для приложения?
Пользователь вошел в систему и выполняет какое-то действие
Я полагаю, вы используете какой-то переходник для клавиатуры. Затем просто получите объект сеанса, и у вас должна быть дополнительная информация где-то там.
В противном случае вы можете просто проанализировать запрос самостоятельно. При использовании OpenId Connect токен доступа всегда отправляется для каждого запроса в заголовке Authorization. Токен закодирован в base64, вы можете самостоятельно его расшифровать.
Приложение выполняет какое-то действие для какого-то зарегистрированного пользователя, но он не вошел в систему
Маркеры доступа пользователей предназначены для предоставления пользователям разрешений. Как вы говорите в своем вопросе: As a third party application, I want... Итак, здесь вы действуете не как зарегистрированный пользователь, а как приложение, поэтому вместо этого вам нужно использовать учетные данные клиента. Просто дайте клиенту разрешения на перечисление всех пользователей и их ролей (вероятно, этого достаточно с ролью view-users, см. Ссылку ниже) и войдите в систему с предоставлением учетных данных клиента. Затем вы можете обрабатывать детализированные разрешения в бизнес-логике вашего приложения.
См. также:
Ответ 2 · рейтинг 1 · Gab
Для тех, кому действительно нужно выдавать себя за пользователя из клиента, для этого есть новый RFC: token-echange.
Keycloak свободно реализует его во время этого ответа
См., В частности, https://www.keycloak.org/docs/latest/securing_apps/#direct-naked-impersonation