Настройка OIDC на примере Keycloak
Для корректной работы нам понадобится:
- Установленные и настроенные продукты Indeed-Id:
- Indeed AM Server версии 8.1.5 и выше;
- Indeed AM Management Console;
- Indeed AM Log Server;
- Необходимые провайдеры для используемых средств аутентификации;
- Расширение Indeed AM IDP;
- Установленный и настроенный Keycloak.
- Заходим через браузер в master console Keycloak.
- В левом меню выбираем Identity providers
- В открывшемся окне нажимаем кнопку Add provider, в выпадающем списке выбираем OpenID Connect v1.0
- Задаем имя провайдера в поле Alias
- В OpenID Connect settings ставим переключатель Use discovery endpoint в положение ON.
- В строку Discovery endpoint ставим значение: https://dns_имя_машины_с_idp/am/idp/.well-known/openid-configuration
- Если сервер Idp настроен корректно, то подгрузятся настройки с indeed idp. Проверить это можно нажав на Show metadata, должны открыться загруженные настройки.
- Придумаем и укажем в поле Client ID уникальный идентификатор
- Придумаем и укажем в поле Client Secret клиентский секрет
- После этого нажимаем Add.
- Если требуется, чтобы у пользователя была возможность завершить сессию при выходе, нажимаем Advanced и ставим переключатель Backchannel logout в положение ON
- Нажимаем Save.
- На машине с Indeed Idp переходим в файл
C:\inetpub\wwwroot\am\idp\app-settings.json
- Ищем в нем LoginFormats
- Копируем первый блок, например:
{
"ServiceProvider": "urn:indeedid:emc",
"InLoginFormat": "Name",
"OutLoginFormat": "SamCompatibleName"
},
- Вставляем его ниже, меняем значение параметра ServiceProvider на Client ID, который мы добавляли в Keycloak, у нас это keycloak, меняем значение параметра OutLoginFormat на PrincipalName
Должно получиться так:
{
"ServiceProvider": "keycloak",
"InLoginFormat": "Name",
"OutLoginFormat": "PrincipalName"
},
- Далее ищем блок "Clients":
- Копируем блок с примером конфигурации:
{
"ClientId": "example-client",
"ClientSecret": "secret_secret_secret",
"DisplayName": "Example client application",
"Permissions": [
"ept:authorization",
"ept:device",
"ept:introspection",
"ept:logout",
"ept:revocation",
"ept:token",
"gt:authorization_code",
"gt:client_credentials",
"gt:urn:ietf:params:oauth:grant-type:device_code",
"gt:implicit",
"gt:password",
"gt:refresh_token",
"rst:code",
"rst:code id_token",
"rst:code id_token token",
"rst:code token",
"rst:id_token",
"rst:id_token token",
"rst:none",
"rst:token",
"scp:address",
"scp:email",
"scp:phone",
"scp:profile",
"scp:roles"
],
"PostLogoutRedirectUris": [
"https://localhost:5003/signout-callback-oidc"
],
"RedirectUris": [
"https://localhost:5003/signin-oidc"
],
"Requirements": [
"ft:pkce"
]
}
- Вставляем его ниже, не забываем поставить между блоками запятую.
значение ClientId меняем на keycloak,
значение ClientSecret меняем на Client Secret, который вводили в Keycloak,
значение "PostLogoutRedirectUris" меняем на "https://dns_имя_машины_с_idp/am/idp/connect/logout"
значение "RedirectUris" меняем на значение Redirect URI из Keycloak "https://dns_имя_машины_с_keycloak/realms/master/broker/indeed_oidc/endpoint"
значение "Requirements" оставляем пустым.
Должно получиться так:
{
"ClientId": "keycloak",
"ClientSecret": "keycloaksecret",
"DisplayName": "Example client application",
"Permissions": [
"ept:authorization",
"ept:device",
"ept:introspection",
"ept:logout",
"ept:revocation",
"ept:token",
"gt:authorization_code",
"gt:client_credentials",
"gt:urn:ietf:params:oauth:grant-type:device_code",
"gt:implicit",
"gt:password",
"gt:refresh_token",
"rst:code",
"rst:code id_token",
"rst:code id_token token",
"rst:code token",
"rst:id_token",
"rst:id_token token",
"rst:none",
"rst:token",
"scp:address",
"scp:email",
"scp:phone",
"scp:profile",
"scp:roles"
],
"PostLogoutRedirectUris": [
"https://server01.test.local/am/idp/connect/logout"
],
"RedirectUris": [
"https://key.test.local:8443/realms/master/broker/oidc/endpoint"
],
"Requirements": [
]
}
После этого сохраняем файл app-settings.json.
- Открываем IIS, Пулы приложений, выбираем IndeedAM.IDP, Перезапуск.
Перезапускаем пул.
- Пробуем подключиться к Keycloak, в окне логина появится дополнительная кнопка с названием указанного в Keycloak Alias, в нашем случае это indeed_oidc. Нажимаем ее без ввода логина и пароля.
- Происходит перенаправление на страницу Indeed Idp, вводим имя пользователя
- Выбираем способ аутентификации
- Вводим, в данном случае passcode и успешно входим в Keycloak.
|