keycloak_client - Позволяет администрировать клиентов Keycloak через API Keycloak
Новая версия с 2.5.
Обзор
- Этот модуль позволяет администрировать клиентов Keycloak через REST API Keycloak. Он требует доступа к REST API через OpenID Connect; пользователь, подключающийся, и клиент, используемый, должны иметь необходимые права доступа. В стандартной установке Keycloak admin-cli и администраторский пользователь будут работать, как и отдельное определение клиента со скоупом, настроенным под ваши нужды, и пользователь с ожидаемыми ролями.
- Имена параметров модуля являются snake_cased версиями camelCase, которые встречаются в API Keycloak и его документации по адресу http://www.keycloak.org/docs-api/3.3/rest-api/. Предоставляются псевдонимы, чтобы можно было использовать и camelCased версии.
- API Keycloak не всегда требует, чтобы использовались только разумные настройки — вы можете установить настройки, специфичные для SAML, на клиенте OpenID Connect, например, и наоборот. Будьте внимательны. Если вы не указываете настройку, обычно выбирается разумное значение по умолчанию.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| admin_url | URL интерфейса администрирования клиента. В API Keycloak это «adminUrl». Псевдонимы: adminUrl | ||
| attributes | Словарь дополнительных атрибутов для этого клиента. Может содержать различные параметры конфигурации; примеры приведены в разделе примеров. Полный список допустимых опций не доступен; возможные опции, начиная с Keycloak 3.4, перечислены ниже. API Keycloak не проверяет, подходит ли выбранная опция для используемого протокола; если опция указана, Keycloak просто её проигнорирует. | ||
| 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 привязки для службы потребления утверждений клиента (ответы на вход). | ||
| saml_assertion_consumer_url_redirect | URL SAML Redirect привязки для службы потребления утверждений клиента (ответы на вход). | ||
| 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 | SAML POST адрес привязки для службы единого выхода клиента. | ||
| saml_single_logout_service_url_redirect | SAML адрес привязки Redirect для службы единого выхода клиента. | ||
| user.info.response.signature.alg | Для клиентов OpenID-Connect, алгоритм JWA для подписанных ответов на UserInfo-точку входа. Один из RS256 или unsigned. | ||
| request.object.signature.alg | Для клиентов OpenID-Connect, алгоритм JWA, который клиент должен использовать при отправке объекта запроса OIDC. Один из any, none, RS256. | ||
| use.jwks.url | Для клиентов OpenID-Connect, булево значение, определяющее, использовать ли JWKS URL для получения открытых ключей клиента. | ||
| jwks.url | Для клиентов OpenID-Connect, URL, где хранятся ключи клиента в JWK. | ||
| jwt.credential.certificate | Для клиентов OpenID-Connect, сертификат клиента для проверки JWT, выпущенных клиентом и подписанных его ключом, закодированный в base64. | ||
| auth_client_id обязательно | OpenID Connect client_id для аутентификации с 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 по адресу http://www.keycloak.org/docs-api/3.3/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 | Список ролей по умолчанию для этого клиента. Если указанные клиентские роли еще не существуют, они будут созданы. В API Keycloak это 'defaultRoles'. Псевдонимы: defaultRoles | ||
| description | Описание клиента в Keycloak | ||
| direct_access_grants_enabled | Включены ли прямые разрешения доступа для данного клиента (OpenID connect). В API Keycloak это 'directAccessGrantsEnabled'. Псевдонимы: directAccessGrantsEnabled | ||
| enabled | Включен ли данный клиент? | ||
| frontchannel_logout | Включена ли функция frontchannel logout для данного клиента. Это соответствует параметру 'frontchannelLogout' в API Keycloak REST. Псевдонимы: frontchannelLogout | ||
| full_scope_allowed | Включена ли функция "Full Scope Allowed" для данного клиента. Это соответствует параметру 'fullScopeAllowed' в API Keycloak REST. Псевдонимы: fullScopeAllowed | ||
| id | Идентификатор клиента, с которым нужно работать. Обычно это UUID. Требуется указать либо этот идентификатор, либо client_id. Если указаны оба, приоритет отдаётся этому идентификатору. | ||
| implicit_flow_enabled | Включен ли неявный поток для данного клиента (OpenID connect). Это соответствует параметру 'implictFlowEnabled' в API Keycloak REST. Псевдонимы: implicitFlowEnabled | ||
| name | Имя клиента (не совпадает с client_id) | ||
| node_re_registration_timeout | Таймаут повторной регистрации узлов кластера для данного клиента. Это соответствует параметру 'nodeReRegistrationTimeout' в API Keycloak REST. Псевдонимы: nodeReRegistrationTimeout | ||
| not_before | Отменить все токеноы, выпущенные до этой даты для данного клиента (это временная метка Unix). Соответствует параметру 'notBefore' в API Keycloak REST. Псевдонимы: notBefore | ||
| protocol |
| Тип клиента (либо openid-connect либо saml). | |
| protocol_mappers | Список словарей, определяющих мапперы протоколов для данного клиента. Соответствует параметру 'protocolMappers' в API Keycloak REST. Псевдонимы: protocolMappers | ||
| consentRequired | Указывает, требуется ли пользовательское согласие на клиента для активации данного маппера. | ||
| consentText | Человекопонятное название согласия, которое пользователь должен принять. | ||
| id | Обычно UUID, определяющий внутренний ID этого экземпляра маппера протокола. | ||
| name | Имя этого маппера протокола. | ||
| protocol |
| Это либо openid-connect либо saml, это определяет, для какого протокола активен этот маппер протокола. | |
| protocolMapper | Внутреннее имя Keycloak типа этого маппера протокола. Полный список невозможно предоставить, так как он может быть расширен с помощью SPIs пользователем 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Полный список доступных мапперов на вашей установке можно получить на консоли администрирования, перейдя в раздел Сведения о сервере -> Поставщики и посмотрев раздел 'protocol-mapper'. | ||
| config | Словарь, определяющий параметры конфигурации маппера протокола; содержимое отличается в зависимости от значения protocolMapper и не документировано, кроме как источником мапперов и его родительских классов. Пример приведён ниже. Самый простой способ получить допустимые значения конфигурации — вывести уже существующую конфигурацию маппера протокола в режиме проверки в поле existing. | ||
| public_client | Тип доступа для данного клиента — публичный или нет. Соответствует параметру 'publicClient' в API Keycloak REST. Псевдонимы: publicClient | ||
| redirect_uris | Допустимые URL-адреса перенаправления для данного клиента. Соответствует параметру 'redirectUris' в API Keycloak REST. Псевдонимы: redirectUris | ||
| registered_nodes | Словарь зарегистрированных узлов кластера (с nodename в качестве ключа и времени последней регистрации в качестве значения). Соответствует параметру 'registeredNodes' в API Keycloak REST.Псевдонимы: registeredNodes | ||
| registration_access_token | Токен доступа к регистрации предоставляет клиентам доступ к службе регистрации клиентов. Это соответствует параметру 'registrationAccessToken' в API Keycloak REST. Псевдонимы: registrationAccessToken | ||
| root_url | Базовый URL, добавляемый к относительным URL-адресам для данного клиента. Соответствует параметру 'rootUrl' в API Keycloak REST. Псевдонимы: rootUrl | ||
| secret | При использовании client_authenticator_type client-secret (по умолчанию), вы можете указать секрет здесь (в противном случае он будет сгенерирован, если не существует). Если вы измените этот секрет, модуль не зарегистрирует изменение в настоящее время (но изменённый секрет будет сохранён). | ||
| service_accounts_enabled | Включены ли учетные записи служб для этого клиента (OpenID connect). Это соответствует параметру 'serviceAccountsEnabled' в API Keycloak REST. Псевдонимы: serviceAccountsEnabled | ||
| standard_flow_enabled | Включен ли стандартный поток для этого клиента (OpenID connect). Это соответствует параметру 'standardFlowEnabled' в API Keycloak REST. Псевдонимы: standardFlowEnabled | ||
| state |
| Состояние клиента При present, клиент будет создан (или обновлён, если он уже существует).При absent, клиент будет удалён, если он существует | |
| surrogate_auth_required | Требуется ли суррогатная авторизация. Это соответствует параметру 'surrogateAuthRequired' в API Keycloak REST. Псевдонимы: surrogateAuthRequired | ||
| use_template_config | Использовать ли конфигурацию из client_template. Это соответствует параметру 'useTemplateConfig' в API Keycloak REST. Псевдонимы: useTemplateConfig | ||
| use_template_mappers | Использовать ли конфигурацию маппера из client_template. Это соответствует параметру 'useTemplateMappers' в API Keycloak REST. Псевдонимы: useTemplateMappers | ||
| use_template_scope | Использовать ли конфигурацию области из client_template. Это соответствует параметру 'useTemplateScope' в API Keycloak REST. Псевдонимы: useTemplateScope | ||
| validate_certs | По умолчанию: "да" | Проверять TLS-сертификаты (не отключайте это в рабочей среде). | |
| web_origins | Список разрешённых источников 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'} |
Статус
Этот модуль помечен как превью, что означает, что его интерфейс не гарантируется обратной совместимостью.
Техническое обслуживание
Этот модуль помечен как общественный, что означает, что он поддерживается сообществом Ansible. См. Поддержка и техническое обслуживание модулей для получения дополнительной информации.
Список других модулей, также поддерживаемых сообществом Ansible, см. здесь.
Автор
- 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.6/modules/keycloak_client_module.html