Выдача «ключей API» с помощью Keycloak - PullRequest
0 голосов
/ 08 сентября 2018

Моя установка состоит из трех компонентов:

  • Бэкэнд-приложение (Python / Flask)
  • Интерфейсное приложение (VueJS)
  • Keycloak

Интерфейс будет использовать Keycloak, чтобы позволить пользователям входить в систему и использовать токены доступа для аутентификации запросов к бэкэнду.Все идет нормально.

Теперь я хочу, чтобы сторонние приложения могли делать аутентифицированные запросы к бэкэнду, и мне интересно, как это можно реализовать с помощью Keycloak?Моя идея состоит в том, чтобы выдать новый набор учетных данных для каждого клиента.Затем их приложение обращается к Keycloak для получения токенов доступа.Затем я могу использовать Keycloak для управления контролем доступа для всех пользователей API.

  • Как будет представлено стороннее приложение в Keycloak-клиенте?пользователь?...?
  • Существуют ли передовые практики для такого варианта использования?

1 Ответ

0 голосов
/ 06 ноября 2018

Я наконец-то нашел решение, которое хорошо работает и, похоже, является «способом Keycloak» для выдачи учетных данных внешним приложениям. Чтобы создать новый набор учетных данных, добавьте новый клиент Keycloak и измените следующие параметры:

  • Стандартный поток включен: OFF
  • Разрешения на прямой доступ включены: ВЫКЛ.
  • Тип доступа: Конфиденциально
  • Сервисные учетные записи включены: ON

Внешнее приложение будет использовать имя нашего недавно созданного клиента в качестве client_id. client_secret был сгенерирован автоматически и находится на вкладке Credentials .

Предоставление клиенту доступа к вашим услугам

Если ваши службы, защищенные Keycloak, настроены для проверки заявки aud на входящие токены Bearer, необходимо выполнить второй шаг. По умолчанию аудитория токенов JWT, которые Keycloak выдает вашему клиенту, будет установлена ​​на имя вашего клиента, поэтому они будут отклонены вашими службами. Вы можете использовать Клиентские области , чтобы изменить это поведение:

  1. Создание новой клиентской области
  2. Выберите «Шаблон аудитории»
  3. Выберите службу, к которой вы хотите предоставить доступ внешним приложениям, и нажмите «Далее»
  4. Добавить область к клиенту, которого вы только что создали ( Области клиента * вкладка 1042 *)

Keycloak теперь добавит имя вашей службы в заявку aud на все токены JWT, которые она выдает вашему новому клиенту. Обратитесь к документации Keycloak на Сервисных учетных записях для получения более подробной информации.

Обмен учетными данными клиента для токена доступа

Внешнее приложение теперь может использовать свои учетные данные для получения токена доступа из конечной точки токена Keycloak:

POST {keycloak-url}/auth/realms/atlas/protocol/openid-connect/token

  • Установите заголовок Content-Type на application/x-www-form-urlencoded
  • Аутентифицируйте запрос с помощью Basic Authentication , используя ваш идентификатор клиента в качестве пользователя и секрет клиента в качестве пароля
  • Набор grant_type=client_credentials в теле запроса
...