Я наконец-то нашел решение, которое хорошо работает и, похоже, является «способом Keycloak» для выдачи учетных данных внешним приложениям. Чтобы создать новый набор учетных данных, добавьте новый клиент Keycloak и измените следующие параметры:
- Стандартный поток включен: OFF
- Разрешения на прямой доступ включены: ВЫКЛ.
- Тип доступа: Конфиденциально
- Сервисные учетные записи включены: ON
Внешнее приложение будет использовать имя нашего недавно созданного клиента в качестве client_id
. client_secret
был сгенерирован автоматически и находится на вкладке Credentials .
Предоставление клиенту доступа к вашим услугам
Если ваши службы, защищенные Keycloak, настроены для проверки заявки aud
на входящие токены Bearer, необходимо выполнить второй шаг. По умолчанию аудитория токенов JWT, которые Keycloak выдает вашему клиенту, будет установлена на имя вашего клиента, поэтому они будут отклонены вашими службами. Вы можете использовать Клиентские области , чтобы изменить это поведение:
- Создание новой клиентской области
- Выберите «Шаблон аудитории»
- Выберите службу, к которой вы хотите предоставить доступ внешним приложениям, и нажмите «Далее»
- Добавить область к клиенту, которого вы только что создали ( Области клиента * вкладка 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
в теле запроса