keycloak_client - Позволяет администрировать клиентов Keycloak через API Keycloak
Новое в версии 2.5.
Обзор
- Этот модуль позволяет администрировать клиентов Keycloak через REST API Keycloak. Он требует доступа к REST API через OpenID Connect; пользователь, подключающийся, и используемый клиент должны иметь необходимые права доступа. В стандартной установке Keycloak admin-cli и администраторский пользователь будут работать, так же как и отдельное определение клиента с областью, настроенной в соответствии с вашими потребностями, и пользователь, имеющий ожидаемые роли.
- Имена параметров модуля являются змейными регистрами (snake_case) соответствующих параметров с использованием верблюжьей нотации (camelCase), найденных в API Keycloak и документации на http://www.keycloak.org/docs-api/3.3/rest-api/
- API Keycloak не всегда проверяет, чтобы использовались только разумные настройки — вы можете задать настройки, специфичные для SAML, для клиента OpenID Connect, и наоборот. Будьте внимательны. Если вы не укажете настройку, обычно выбирается разумное значение по умолчанию.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| admin_url | URL интерфейса администрирования клиента. Это 'adminUrl' в API Keycloak REST. | ||
| attributes | Словарь дополнительных атрибутов для этого клиента. Он может содержать различные параметры конфигурации; пример приведен в разделе примеров. Хотя полный список допустимых параметров недоступен, возможные параметры на момент Keycloak 3.4 перечислены ниже. API Keycloak не проверяет, подходит ли данный параметр для используемого протокола; если он указан, Keycloak просто не будет его использовать. | ||
| saml.signing.certificate | Сертификат ключа подписи SAML, закодированный в base64. | ||
| saml.server.signature.keyinfo.ext | Для клиентов SAML, логическое значение, определяющее, следует ли оптимизировать поиск ключа подписи REDIRECT путём включения идентификатора ключа подписи в элемент SAML Extensions. | ||
| saml.authnstatement | Для клиентов SAML, логическое значение, определяющее, следует ли включать в ответ на вход заявление, содержащее метод и отметку времени. | ||
| saml_force_name_id_format | Для клиентов SAML, логическое значение, определяющее, следует ли игнорировать запрашиваемый формат имени субъекта NameID и использовать вместо него конфигурированный. | ||
| jwks.url | Для клиентов OpenID-Connect, URL, где хранятся ключи клиента в JWK. | ||
| saml_single_logout_service_url_redirect | URL для перенаправления SAML для службы единого выхода клиента. | ||
| saml.signing.private.key | Приватный ключ подписи SAML, закодированный в base64. | ||
| saml.force.post.binding | Для клиентов SAML, логическое значение, определяющее, следует ли всегда использовать привязку POST для ответов. | ||
| saml.client.signature | Для клиентов SAML, логическое значение, определяющее, требуется ли и проверяется ли подпись клиента. | ||
| saml.server.signature | Логическое значение, определяющее, следует ли подписывать документы SAML областью. | ||
| jwt.credential.certificate | Для клиентов OpenID-Connect, сертификат клиента для проверки JWT, выпущенного клиентом и подписанного его ключом, закодированный в base64. | ||
| saml_name_id_format | Для клиентов SAML, формат NameID для использования (один из username, email, transient, или persistent). | ||
| user.info.response.signature.alg | Для клиентов OpenID-Connect, алгоритм JWA для подписанных ответов с UserInfo-точкой конечного доступа. Один из RS256 или unsigned. | ||
| request.object.signature.alg | Для клиентов OpenID-Connect, алгоритм JWA, который клиент должен использовать при отправке объекта запроса OIDC. Один из any, none, RS256. | ||
| saml_assertion_consumer_url_post | URL привязки SAML POST для службы потребления утверждений клиента (ответы на вход). | ||
| saml.encrypt | Логическое значение, определяющее, следует ли шифровать утверждения SAML с помощью открытого ключа клиента. | ||
| saml.signature.algorithm | Алгоритм подписи, используемый для подписи документов SAML. Один из RSA_SHA256, RSA_SHA1, RSA_SHA512, или DSA_SHA1. | ||
| 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.onetimeuse.condition | Для клиентов SAML, логическое значение, определяющее, следует ли включать условие OneTimeUse в ответы на вход. | ||
| saml_single_logout_service_url_post | URL привязки SAML POST для службы единого выхода клиента. | ||
| saml_assertion_consumer_url_redirect | URL привязки перенаправления SAML для службы потребления утверждений клиента (ответы на вход). | ||
| use.jwks.url | Для клиентов OpenID-Connect, логическое значение, определяющее, следует ли использовать JWKS URL для получения открытых ключей клиента. | ||
| 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). Это 'authorizationServicesEnabled' в API Keycloak REST. | ||
| authorization_settings | Структура данных, определяющая параметры авторизации для этого клиента. Для справки, см. документацию API Keycloak по адресу http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_resourceserverrepresentation. Это 'authorizationSettings' в API Keycloak REST. | ||
| base_url | URL по умолчанию для использования, когда сервер авторизации должен перенаправить или связать клиента. Это 'baseUrl' в API Keycloak REST. | ||
| bearer_only | Тип доступа этого клиента — только bearer. Это 'bearerOnly' в API Keycloak REST. | ||
| client_authenticator_type |
| Как клиенты выполняют аутентификацию на сервере авторизации? Можно выбрать client-secret или client-jwt. При использовании client-secret, параметр модуля secret может его установить, а для client-jwt, вы можете использовать ключи use.jwks.url, jwks.url, и jwt.credential.certificate в параметре модуля attributes для настройки его поведения. Это 'clientAuthenticatorType' в API Keycloak REST. | |
| client_id | Идентификатор клиента, над которым выполняется работа. Обычно это буквенно-цифровое имя, выбранное вами. Требуется либо это, либо id. Если вы укажете оба, id имеет приоритет. Это 'clientId' в API Keycloak REST. | ||
| client_template | Шаблон клиента, используемый для этого клиента. Если он не существует, этот параметр будет молча пропущен. Это 'clientTemplate' в API Keycloak REST. | ||
| consent_required | Если включено, пользователи должны дать согласие на доступ клиента. Это 'consentRequired' в API Keycloak REST. | ||
| default_roles | Список ролей по умолчанию для этого клиента. Если ссылающиеся на них роли клиента ещё не существуют, они будут созданы. Это 'defaultRoles' в API Keycloak REST. | ||
| description | Описание клиента в Keycloak. | ||
| direct_access_grants_enabled | Включены ли прямые предоставления доступа для этого клиента (OpenID connect)? Это 'directAccessGrantsEnabled' в API Keycloak REST. | ||
| enabled | Включён ли этот клиент? | ||
| frontchannel_logout | Включен ли выход через frontchannel для этого клиента? Это 'frontchannelLogout' в API Keycloak REST. | ||
| full_scope_allowed | Включено ли свойство "Разрешение полного доступа" для этого клиента? Это 'fullScopeAllowed' в API Keycloak REST. | ||
| id | Идентификатор клиента, над которым выполняется работа. Обычно это UUID. Требуется либо это, либо client_id. Если вы укажете оба, этот параметр имеет приоритет. | ||
| implicit_flow_enabled | Включен ли неявный поток для этого клиента (OpenID connect)? Это 'implictFlowEnabled' в API Keycloak REST. | ||
| name | Название клиента (это не то же самое, что client_id) | ||
| node_re_registration_timeout | Тайм-аут повторной регистрации узла кластера для этого клиента. Это 'nodeReRegistrationTimeout' в API Keycloak REST. | ||
| not_before | Отменить все токены, выпущенные до этой даты для этого клиента (это метка времени Unix). Это 'notBefore' в API Keycloak REST. | ||
| protocol |
| Тип клиента (либо openid-connect либо saml. | |
| protocol_mappers | Список словарей, определяющих мапперы протокола для этого клиента. Это 'protocolMappers' в API Keycloak REST. | ||
| consentText | Наименование согласия, представленное пользователю для принятия. | ||
| protocol |
| Это либо openid-connect либо saml, это определяет, для какого протокола активен данный маппер протокола. | |
| name | Имя этого маппера протокола. | ||
| config | Словарь, определяющий параметры конфигурации для маппера протокола; содержимое отличается в зависимости от значения protocolMapper и не документируется, кроме как источником мапперов и его родительскими классами. Ниже приведён пример. Самый простой способ получить допустимые значения конфигурации — вывести существующую конфигурацию маппера протокола через режим проверки в поле existing. | ||
| 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Полный список доступных мапперов на вашей установке можно получить на панели администратора, перейдя в Информация о сервере -> Поставщики и просмотре под 'protocol-mapper'. | ||
| consentRequired | Указывает, требуется ли пользователю предоставить согласие клиенту, чтобы данный маппер был активен. | ||
| id | Обычно UUID, определяющий внутренний идентификатор экземпляра этого маппера протокола. | ||
| public_client | Является ли тип доступа для этого клиента общедоступным или нет. Это 'publicClient' в API Keycloak REST. | ||
| redirect_uris | Допустимые URI перенаправления для этого клиента. Это 'redirectUris' в API Keycloak REST. | ||
| registered_nodes | Словарь зарегистрированных узлов кластера (с nodename в качестве ключа и времени последней регистрации в качестве значения). Это 'registeredNodes' в API Keycloak REST. | ||
| registration_access_token | Токен доступа к регистрации предоставляет клиентам доступ к службе регистрации клиента. Это 'registrationAccessToken' в API Keycloak REST. | ||
| root_url | Корневой URL, добавляемый к относительным URL-адресам для этого клиента. Это 'rootUrl' в API Keycloak REST. | ||
| secret | При использовании client_authenticator_type client-secret (по умолчанию), вы можете указать секрет здесь (в противном случае он будет сгенерирован, если не существует). Если вы измените этот секрет, модуль не зарегистрирует изменение в настоящее время (но изменённый секрет будет сохранён). | ||
| service_accounts_enabled | Включены ли для этого клиента сервисные учётные записи (OpenID connect)? Это 'serviceAccountsEnabled' в API Keycloak REST. | ||
| standard_flow_enabled | Включить стандартный поток для этого клиента или нет (OpenID connect). Это 'standardFlowEnabled' в API Keycloak REST. | ||
| state |
| Состояние клиента При present, клиент будет создан (или обновлён, если он уже существует).При absent, клиент будет удалён, если он существует. | |
| surrogate_auth_required | Требуется ли суррогатное аутентификация. Это 'surrogateAuthRequired' в API Keycloak REST. | ||
| use_template_config | Использовать ли конфигурацию из client_template. Это 'useTemplateConfig' в API Keycloak REST. | ||
| use_template_mappers | Использовать ли конфигурацию маппера из client_template. Это 'useTemplateMappers' в API Keycloak REST. | ||
| use_template_scope | Использовать ли конфигурацию области из client_template. Это 'useTemplateScope' в API Keycloak REST. | ||
| validate_certs | По умолчанию: да | Проверять сертификаты TLS (не отключайте это в рабочей среде). | |
| web_origins | Список разрешенных источников CORS. Это 'webOrigins' в API Keycloak REST. | ||
Примеры
- 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.5/modules/keycloak_client_module.html