community.general.keycloak_client – Разрешает администрирование клиентов Keycloak через API Keycloak
Примечание
Этот плагин входит в коллекцию community.general (версия 2.0.1).
Для его установки используйте: ansible-galaxy collection install community.general.
Чтобы использовать его в книге задач, укажите: community.general.keycloak_client.
Описание
- Этот модуль позволяет администрировать клиентов Keycloak через REST API Keycloak. Он требует доступа к REST API через OpenID Connect; пользователь, подключающийся, и используемый клиент должны иметь соответствующие права доступа. В стандартной установке Keycloak admin-cli и административный пользователь будут работать, как и отдельное определение клиента со scope, настроенным под ваши потребности, и пользователь с необходимыми ролями.
- Имена опций модуля являются snake_case вариантами camelCase вариантов, найденных в API Keycloak и его документации по адресу https://www.keycloak.org/docs-api/8.0/rest-api/index.html. Предоставляются алиасы, чтобы можно было использовать camelCased версии.
- API Keycloak не всегда проверяет входные данные, например, вы можете установить настройки, специфичные для SAML, на клиенте OpenID Connect, и наоборот. Будьте внимательны. Если вы не укажете настройку, обычно выбирается разумное значение по умолчанию.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| admin_url строка | URL интерфейса администрирования клиента. Это 'adminUrl' в API Keycloak REST. псевдонимы: 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, логическое значение, указывающее, следует ли оптимизировать поиск ключа подписи REDIRECT, включив идентификатор ключа подписи в элемент 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, логическое значение, указывающее, следует ли использовать URL JWKS для получения открытых ключей клиента. | ||
| 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). Это 'authorizationServicesEnabled' в API Keycloak REST. псевдонимы: authorizationServicesEnabled | |
| authorization_settings словарь | Структура данных, определяющая параметры авторизации для этого клиента. Для справки, см. документацию API Keycloak по адресу https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_resourceserverrepresentation. Это 'authorizationSettings' в API Keycloak REST. псевдонимы: authorizationSettings | ||
| base_url строка | URL по умолчанию для использования, когда сервер аутентификации должен перенаправить или связать клиента Это 'baseUrl' в API Keycloak REST. псевдонимы: baseUrl | ||
| bearer_only логическое значение |
| Тип доступа к этому клиенту — только токен bearer. Это 'bearerOnly' в API Keycloak REST. псевдонимы: bearerOnly | |
| 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.псевдонимы: clientAuthenticatorType | |
| client_id строка | Идентификатор клиента, над которым нужно работать. Обычно это буквенно-цифровое имя, выбранное вами. Требуется либо это, либо id. Если вы укажете оба, id будет иметь приоритет. Это 'clientId' в API Keycloak REST. псевдонимы: clientId | ||
| client_template строка | Шаблон клиента, который следует использовать для этого клиента. Если его не существует, этот параметр будет проигнорирован. Это 'clientTemplate' в API Keycloak REST. псевдонимы: clientTemplate | ||
| consent_required логическое значение |
| Если включено, пользователи должны дать согласие на доступ клиента. Это 'consentRequired' в API Keycloak REST. псевдонимы: consentRequired | |
| default_roles список / элементы=строка | список стандартных ролей для данного клиента. Если ссылаемые роли клиента еще не существуют, они будут созданы. Это соответствует полю 'defaultRoles' в API Keycloak REST. псевдонимы: defaultRoles | ||
| description строка | Описание клиента в Keycloak | ||
| direct_access_grants_enabled логическое |
| Включены ли для этого клиента прямые разрешения доступа (OpenID connect)? Это соответствует полю 'directAccessGrantsEnabled' в API Keycloak REST. псевдонимы: directAccessGrantsEnabled | |
| enabled логическое |
| Включен ли этот клиент? | |
| frontchannel_logout логическое |
| Включен ли фронтальный выход для этого клиента? Это соответствует полю 'frontchannelLogout' в API Keycloak REST. псевдонимы: frontchannelLogout | |
| full_scope_allowed логическое |
| Включена ли функция "Разрешение полного доступа" для этого клиента? Это соответствует полю 'fullScopeAllowed' в API Keycloak REST. псевдонимы: fullScopeAllowed | |
| id строка | Идентификатор клиента для обработки. Обычно это UUID. Требуется либо этот, либо client_id. Если указаны оба, используется этот. | ||
| implicit_flow_enabled логическое |
| Включен ли неявный поток для этого клиента (OpenID connect)? Это соответствует полю 'implicitFlowEnabled' в 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 | ||
| config словарь | Словарь, определяющий параметры конфигурации для маппера протокола; содержимое зависит от значения protocolMapper и не документировано, за исключением источника мапперов и его родительских классов. Пример приведен ниже. Самый простой способ получить допустимые значения конфигурации — вывести существующую конфигурацию маппера протокола в режиме проверки в поле existing. | ||
| 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'. | ||
| public_client логическое |
| Тип доступа для данного клиента — общедоступный или нет? Это соответствует полю 'publicClient' в API Keycloak REST. псевдонимы: publicClient | |
| realm строка | По умолчанию: "master" | Домен, в котором создавать клиента. | |
| redirect_uris список / элементы=строка | Допустимые URI перенаправления для этого клиента. Это соответствует полю '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 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 dictionary | всегда | Представление клиента после выполнения модуля (пример усечён). Пример: {'adminUrl': 'http://www.example.com/admin_url', 'attributes': {'request.object.signature.alg': 'RS256'}} |
| existing dictionary | всегда | Представление существующего клиента (пример усечён). Пример: {'adminUrl': 'http://www.example.com/admin_url', 'attributes': {'request.object.signature.alg': 'RS256'}} |
| msg string | всегда | Сообщение о том, какое действие было выполнено. Пример: Клиент testclient был обновлён |
| proposed dictionary | всегда | Представление предложенных изменений для клиента. Пример: {'clientId': 'test'} |
Авторы
- Ейке Фрост (@eikef)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/general/keycloak_client_module.html