community.general.keycloak_client – Позволяет администрировать клиентов Keycloak через API Keycloak
Примечание
Этот плагин входит в коллекцию community.general (версия 1.3.2).
Для его установки используйте: ansible-galaxy collection install community.general.
Для использования в книге задач укажите: community.general.keycloak_client.
Описание
- Этот модуль позволяет администрировать клиентов Keycloak через REST API Keycloak. Он требует доступа к REST API через OpenID Connect; пользователь, подключающийся, и используемый клиент должны иметь необходимые права доступа. В стандартной установке Keycloak admin-cli и пользователь-администратор будут работать, а также отдельное определение клиента с объемом, настроенным под ваши нужды, и пользователь, имеющий ожидаемые роли.
- Имена параметров модуля — это snake_cased версии camelCase, найденные в API Keycloak и его документации по адресу https://www.keycloak.org/docs-api/8.0/rest-api/index.html. Предоставлены псевдонимы, чтобы можно было использовать также camelCased версии.
- API Keycloak не всегда проверяет вводимые данные, например, вы можете задать настройки, специфичные для SAML, для клиента OpenID Connect, и наоборот. Будьте осторожны. Если вы не укажете настройку, обычно выбирается разумное значение по умолчанию.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| admin_url строка | URL интерфейса администратора клиента. В API Keycloak это 'adminUrl'. псевдонимы: adminUrl | ||
| attributes словарь | Словарь дополнительных атрибутов для данного клиента. Может содержать различные параметры конфигурации; примеры приведены в разделе примеров. Хотя полный список допустимых вариантов недоступен, возможные варианты, начиная с Keycloak 3.4, перечислены ниже. API Keycloak не проверяет, подходит ли данный параметр для используемого протокола; если он указан, Keycloak просто его не будет использовать. | ||
| jwks.url строка | Для клиентов OpenID Connect, URL, где хранятся ключи клиента в формате JWK. | ||
| jwt.credential.certificate строка | Для клиентов OpenID Connect, сертификат клиента для проверки JWT, выпущенного клиентом и подписанного его ключом, закодированный в base64. | ||
| request.object.signature.alg строка | Для клиентов OpenID Connect, алгоритм JWA, который клиент должен использовать при отправке объекта запроса OIDC. Один из any, none, RS256. | ||
| saml.authnstatement строка | Для клиентов SAML, булево значение, указывающее, следует ли включать в ответ на вход информацию о методе и отметке времени. | ||
| saml.client.signature строка | Для клиентов SAML, булево значение, указывающее, требуется ли и проверяется ли подпись клиента. | ||
| saml.encrypt строка | Булево значение, указывающее, следует ли шифровать утверждения SAML с помощью открытого ключа клиента. | ||
| saml.force.post.binding строка | Для клиентов SAML, булево значение, указывающее, следует ли всегда использовать привязку POST для ответов. | ||
| saml.onetimeuse.condition строка | Для клиентов SAML, булево значение, указывающее, следует ли включать условие OneTimeUse в ответы на вход. | ||
| saml.server.signature строка | Булево значение, указывающее, следует ли подписывать документы SAML областью. | ||
| saml.server.signature.keyinfo.ext строка | Для клиентов SAML, булево значение, указывающее, следует ли оптимизировать поиск ключа подписи через включение идентификатора ключа подписи в элемент SAML Extensions. | ||
| saml.signature.algorithm строка | Алгоритм подписи, используемый для подписи документов SAML. Один из RSA_SHA256, RSA_SHA1, RSA_SHA512, или DSA_SHA1. | ||
| saml.signing.certificate строка | Сертификат ключа подписи SAML, закодированный в base64. | ||
| saml.signing.private.key строка | Закрытый ключ подписи SAML, закодированный в base64. | ||
| saml_assertion_consumer_url_post строка | URL SAML POST Binding для службы потребления утверждений клиента (ответы на вход). | ||
| saml_assertion_consumer_url_redirect строка | URL SAML Redirect Binding для службы потребления утверждений клиента (ответы на вход). | ||
| saml_force_name_id_format строка | Для клиентов SAML, булево значение, указывающее, следует ли игнорировать запрашиваемый формат имени субъекта NameID и использовать вместо него конфигурированный. | ||
| saml_name_id_format строка | Для клиентов SAML, формат NameID для использования (один из username, email, transient, или persistent) | ||
| saml_signature_canonicalization_method строка | Метод канонизации подписи SAML. Это одно из четырех значений, а именно http://www.w3.org/2001/10/xml-exc-c14n# для EXCLUSIVE, http://www.w3.org/2001/10/xml-exc-c14n#WithComments для EXCLUSIVE_WITH_COMMENTS, http://www.w3.org/TR/2001/REC-xml-c14n-20010315 для INCLUSIVE и http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments для INCLUSIVE_WITH_COMMENTS. | ||
| saml_single_logout_service_url_post строка | URL SAML POST binding для службы единого выхода клиента. | ||
| saml_single_logout_service_url_redirect строка | URL SAML redirect binding для службы единого выхода клиента. | ||
| use.jwks.url строка | Для клиентов OpenID Connect, булево значение, указывающее, следует ли использовать JWKS URL для получения открытых ключей клиента. | ||
| user.info.response.signature.alg строка | Для клиентов OpenID Connect, алгоритм JWA для подписанных ответов на запросы UserInfo-endpoint. Один из RS256 или unsigned. | ||
| auth_client_id строка | По умолчанию: "admin-cli" | client_id для OpenID Connect для аутентификации в API. | |
| auth_client_secret строка | Секретный ключ клиента для использования совместно с auth_client_id (если требуется). | ||
| auth_keycloak_url строка / обязательно | URL экземпляра Keycloak. псевдонимы: url | ||
| auth_password строка / обязательно | Пароль для аутентификации для доступа к API. псевдонимы: password | ||
| auth_realm строка / обязательно | Имя области Keycloak для аутентификации для доступа к API. | ||
| auth_username строка / обязательно | Имя пользователя для аутентификации для доступа к API. псевдонимы: username | ||
| authorization_services_enabled логическое значение |
| Включены ли сервисы авторизации для этого клиента (OpenID Connect)? В API Keycloak это 'authorizationServicesEnabled'. псевдонимы: authorizationServicesEnabled | |
| authorization_settings словарь | Структура данных, определяющая настройки авторизации для данного клиента. Для справки, см. документацию API Keycloak по адресу https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_resourceserverrepresentation. В API Keycloak это 'authorizationSettings'. псевдонимы: authorizationSettings | ||
| base_url строка | URL по умолчанию, используемый при необходимости перенаправления или связи обратно с клиентом сервером аутентификации. В API Keycloak это 'baseUrl'. псевдонимы: baseUrl | ||
| bearer_only логическое значение |
| Тип доступа для данного клиента - только с токеном Bearer. В API Keycloak это 'bearerOnly'. псевдонимы: bearerOnly | |
| client_authenticator_type строка |
| Как клиенты аутентифицируются на сервере аутентификации? Можно выбрать client-secret или client-jwt. При использовании client-secret, параметр модуля secret может его установить, а при использовании client-jwt, можно использовать ключи use.jwks.url, jwks.url, и jwt.credential.certificate в параметре модуля attributes для настройки его поведения. В API Keycloak это 'clientAuthenticatorType'.псевдонимы: clientAuthenticatorType | |
| client_id строка | Идентификатор клиента, над которым ведется работа. Обычно это буквенно-цифровое имя, выбранное вами. Требуется либо этот, либо id. Если вы указываете оба, id имеет приоритет. В API Keycloak это 'clientId'. псевдонимы: clientId | ||
| client_template строка | Шаблон клиента, используемый для данного клиента. Если он не существует, это поле будет тихо пропущено. В API Keycloak это 'clientTemplate'. псевдонимы: clientTemplate | ||
| consent_required логическое значение |
| Если включено, пользователи должны дать согласие на доступ к клиенту. В API Keycloak это 'consentRequired'. псевдонимы: consentRequired | |
| default_roles список / элементы=строка | список стандартных ролей для этого клиента. Если ссылаемые роли клиента ещё не существуют, они будут созданы. Это "defaultRoles" в Keycloak REST API. псевдонимы: defaultRoles | ||
| description строка | Описание клиента в Keycloak | ||
| direct_access_grants_enabled логический |
| Включены ли прямые разрешения доступа для этого клиента (OpenID Connect)? Это "directAccessGrantsEnabled" в Keycloak REST API. псевдонимы: directAccessGrantsEnabled | |
| enabled логический |
| Включен ли этот клиент? | |
| frontchannel_logout логический |
| Включен ли frontchannel-выход для этого клиента? Это "frontchannelLogout" в Keycloak REST API. псевдонимы: frontchannelLogout | |
| full_scope_allowed логический |
| Включена ли функция "Разрешен полный доступ" для этого клиента? Это "fullScopeAllowed" в Keycloak REST API. псевдонимы: fullScopeAllowed | |
| id строка | Идентификатор клиента для обработки. Обычно это UUID. Требуется либо этот, либо client_id. Если указаны оба, приоритет отдаётся этому. | ||
| implicit_flow_enabled логический |
| Включить неявный поток для этого клиента (OpenID Connect)? Это "implicitFlowEnabled" в Keycloak REST API. псевдонимы: implicitFlowEnabled | |
| name строка | Имя клиента (не то же самое, что client_id) | ||
| node_re_registration_timeout целое число | Таймаут повторной регистрации узла кластера для этого клиента. Это "nodeReRegistrationTimeout" в Keycloak REST API. псевдонимы: nodeReRegistrationTimeout | ||
| not_before целое число | Отменить все токены, выпущенные до этой даты для этого клиента (это временная метка Unix). Это "notBefore" в Keycloak REST API. псевдонимы: notBefore | ||
| protocol строка |
| Тип клиента (либо openid-connect , либо saml. | |
| protocol_mappers список / элементы=словарь | список словарей, определяющих протокольные мапперы для этого клиента. Это "protocolMappers" в Keycloak REST API. псевдонимы: protocolMappers | ||
| config словарь | Словарь, определяющий параметры конфигурации для протокольного маппера; содержимое отличается в зависимости от значения protocolMapper и не документировано, за исключением источника мапперов и его родительских классов. Пример приведён ниже. Получить допустимые значения конфигурации проще всего, выведя существующую конфигурацию протокольного маппера в режиме проверки в поле existing. | ||
| consentRequired логический |
| Указывает, требуется ли пользователю предоставить согласие клиенту, чтобы этот маппер был активен. | |
| consentText строка | Имя согласия на понятном для человека языке, которое предоставляется пользователю для принятия. | ||
| id строка | Обычно UUID, указывающий внутренний идентификатор экземпляра этого протокольного маппера. | ||
| name строка | Имя этого протокольного маппера. | ||
| protocol строка |
| Это либо openid-connect , либо saml, это указывает, для какого протокола этот протокольный маппер активен. | |
| protocolMapper строка | Внутреннее имя Keycloak типа этого протокольного маппера. Хотя исчерпывающий список невозможен, так как он может быть расширен SPI пользователем Keycloak, по умолчанию Keycloak версии 3.4 поставляется, по крайней мере, с docker-v2-allow-all-mapperoidc-address-mapperoidc-full-name-mapperoidc-group-membership-mapperoidc-hardcoded-claim-mapperoidc-hardcoded-role-mapperoidc-role-name-mapperoidc-script-based-protocol-mapperoidc-sha256-pairwise-sub-mapperoidc-usermodel-attribute-mapperoidc-usermodel-client-role-mapperoidc-usermodel-property-mapperoidc-usermodel-realm-role-mapperoidc-usersessionmodel-note-mappersaml-group-membership-mappersaml-hardcode-attribute-mappersaml-hardcode-role-mappersaml-role-list-mappersaml-role-name-mappersaml-user-attribute-mappersaml-user-property-mappersaml-user-session-note-mapperИсчерпывающий список доступных мапперов на вашей установке можно получить на консоли администратора, перейдя в Server Info -> Providers и посмотрев раздел 'protocol-mapper'. | ||
| public_client логический |
| Тип доступа для этого клиента общедоступный или нет? Это "publicClient" в Keycloak REST API. псевдонимы: publicClient | |
| realm строка | По умолчанию: "master" | Домен для создания клиента. | |
| redirect_uris список / элементы=строка | Допустимые URI перенаправления для этого клиента. Это "redirectUris" в Keycloak REST API. псевдонимы: redirectUris | ||
| registered_nodes словарь | словарь зарегистрированных узлов кластера (с nodename в качестве ключа и времени последней регистрации в качестве значения). Это "registeredNodes" в Keycloak REST API.псевдонимы: registeredNodes | ||
| registration_access_token строка | Токен доступа к регистрации предоставляет клиентам доступ к службе регистрации клиентов. Это "registrationAccessToken" в Keycloak REST API. псевдонимы: registrationAccessToken | ||
| root_url строка | Корневой URL-адрес, добавляемый к относительным URL-адресам для этого клиента. Это "rootUrl" в Keycloak REST API. псевдонимы: rootUrl | ||
| secret строка | При использовании client_authenticator_type client-secret (по умолчанию), вы можете указать секрет здесь (в противном случае он будет сгенерирован, если не существует). При изменении этого секрета модуль пока не зарегистрирует изменение (но изменённый секрет будет сохранён). | ||
| service_accounts_enabled логический |
| Включены ли сервисные учётные записи для этого клиента (OpenID connect)? Это "serviceAccountsEnabled" в Keycloak REST API. псевдонимы: serviceAccountsEnabled | |
| standard_flow_enabled логический |
| Включить стандартный поток для этого клиента (OpenID connect)? Это "standardFlowEnabled" в Keycloak REST API. псевдонимы: standardFlowEnabled | |
| state строка |
| Состояние клиента В present, клиент будет создан (или обновлён, если он уже существует).В absent, клиент будет удалён, если он существует | |
| surrogate_auth_required логический |
| Требуется ли суррогатное аутентификацию? Это "surrogateAuthRequired" в Keycloak REST API. псевдонимы: surrogateAuthRequired | |
| use_template_config логический |
| Использовать конфигурацию из client_template? Это "useTemplateConfig" в Keycloak REST API. псевдонимы: useTemplateConfig | |
| use_template_mappers логический |
| Использовать конфигурацию маппера из client_template? Это "useTemplateMappers" в Keycloak REST API. псевдонимы: useTemplateMappers | |
| use_template_scope логический |
| Использовать конфигурацию области из client_template? Это "useTemplateScope" в Keycloak REST API. псевдонимы: useTemplateScope | |
| validate_certs логический |
| Проверять сертификаты TLS (не отключайте это в рабочей среде). | |
| web_origins list / elements=string | Список разрешенных источников CORS. Это 'webOrigins' в API Keycloak REST. псевдонимы: webOrigins | ||
Примеры
- name: Create or update Keycloak client (minimal example)
local_action:
module: keycloak_client
auth_client_id: admin-cli
auth_keycloak_url: https://auth.example.com/auth
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
client_id: test
state: present
- name: Delete a Keycloak client
local_action:
module: keycloak_client
auth_client_id: admin-cli
auth_keycloak_url: https://auth.example.com/auth
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
client_id: test
state: absent
- name: Create or update a Keycloak client (with all the bells and whistles)
local_action:
module: keycloak_client
auth_client_id: admin-cli
auth_keycloak_url: https://auth.example.com/auth
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
state: present
realm: master
client_id: test
id: d8b127a3-31f6-44c8-a7e4-4ab9a3e78d95
name: this_is_a_test
description: Description of this wonderful client
root_url: https://www.example.com/
admin_url: https://www.example.com/admin_url
base_url: basepath
enabled: True
client_authenticator_type: client-secret
secret: REALLYWELLKEPTSECRET
redirect_uris:
- https://www.example.com/*
- http://localhost:8888/
web_origins:
- https://www.example.com/*
not_before: 1507825725
bearer_only: False
consent_required: False
standard_flow_enabled: True
implicit_flow_enabled: False
direct_access_grants_enabled: False
service_accounts_enabled: False
authorization_services_enabled: False
public_client: False
frontchannel_logout: False
protocol: openid-connect
full_scope_allowed: false
node_re_registration_timeout: -1
client_template: test
use_template_config: False
use_template_scope: false
use_template_mappers: no
registered_nodes:
node01.example.com: 1507828202
registration_access_token: eyJWT_TOKEN
surrogate_auth_required: false
default_roles:
- test01
- test02
protocol_mappers:
- config:
access.token.claim: True
claim.name: "family_name"
id.token.claim: True
jsonType.label: String
user.attribute: lastName
userinfo.token.claim: True
consentRequired: True
consentText: "${familyName}"
name: family name
protocol: openid-connect
protocolMapper: oidc-usermodel-property-mapper
- config:
attribute.name: Role
attribute.nameformat: Basic
single: false
consentRequired: false
name: role list
protocol: saml
protocolMapper: saml-role-list-mapper
attributes:
saml.authnstatement: True
saml.client.signature: True
saml.force.post.binding: True
saml.server.signature: True
saml.signature.algorithm: RSA_SHA256
saml.signing.certificate: CERTIFICATEHERE
saml.signing.private.key: PRIVATEKEYHERE
saml_force_name_id_format: False
saml_name_id_format: username
saml_signature_canonicalization_method: "http://www.w3.org/2001/10/xml-exc-c14n#"
user.info.response.signature.alg: RS256
request.object.signature.alg: RS256
use.jwks.url: true
jwks.url: JWKS_URL_FOR_CLIENT_AUTH_JWT
jwt.credential.certificate: JWT_CREDENTIAL_CERTIFICATE_FOR_CLIENT_AUTH
Значения возврата
Общие значения возврата документированы здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| end_state словарь | всегда | Представление клиента после выполнения модуля (образец усечен) Пример: {'adminUrl': 'http://www.example.com/admin_url', 'attributes': {'request.object.signature.alg': 'RS256'}} |
| existing словарь | всегда | Представление существующего клиента (образец усечен) Пример: {'adminUrl': 'http://www.example.com/admin_url', 'attributes': {'request.object.signature.alg': 'RS256'}} |
| msg строка | всегда | Сообщение о том, какое действие было выполнено Пример: Клиент testclient был обновлен |
| proposed словарь | всегда | Представление предложенных изменений клиента Пример: {'clientId': 'test'} |
Авторы
- Eike Frost (@eikef)
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/general/keycloak_client_module.html