community.general.keycloak_client 模块 – 允许通过 Keycloak API 管理 Keycloak 客户端
注意
此模块是 community.general 集合(版本 10.1.0)的一部分。
如果您正在使用 ansible
包,您可能已经安装了这个集合。它不包含在 ansible-core
中。要检查是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用:ansible-galaxy collection install community.general
。
要在 playbook 中使用它,请指定:community.general.keycloak_client
。
概要
此模块允许通过 Keycloak REST API 管理 Keycloak 客户端。它需要通过 OpenID Connect 访问 REST API;连接的用户和正在使用的客户端必须具有必要的访问权限。在默认的 Keycloak 安装中,admin-cli 和一个管理员用户可以工作,或者可以使用具有针对您的需求量身定制的作用域的单独客户端定义,以及具有预期角色的用户。
模块选项的名称是 Keycloak API 及其文档(位于 https://keycloak.java.net.cn/docs-api/8.0/rest-api/index.html)中找到的 camelCase 版本的蛇形命名法版本。提供了别名,因此也可以使用 camelCase 版本。
Keycloak API 并不总是进行健全性检查,例如,您可以在 OpenID Connect 客户端上设置 SAML 特定设置,反之亦然。请小心。如果您不指定设置,通常会选择合理的默认值。
参数
参数 |
注释 |
---|---|
客户端管理界面的 URL。这是 Keycloak REST API 中的“adminUrl”。 |
|
是否在帐户控制台中显示此客户端,即使用户没有活动会话。 选项
|
|
此客户端的更多属性的字典。这可以包含各种配置设置;示例在示例部分中给出。虽然没有提供允许的选项的详尽列表;下面列出了 Keycloak 3.4 的可能选项。Keycloak API 不验证给定选项是否适合所使用的协议;如果无论如何指定,Keycloak 将不会使用它。 |
|
对于 OpenID-Connect 客户端,存储 JWK 中客户端密钥的 URL。 |
|
对于 OpenID-Connect 客户端,用于验证客户端颁发的 JWT 并由其密钥签名的客户端证书,base64 编码。 |
|
对于 OpenID-Connect 客户端,客户端在发送 OIDC 请求对象时需要使用的 JWA 算法。可以是 |
|
对于 SAML 客户端,布尔值指定登录响应中是否应包含包含方法和时间戳的声明。 |
|
对于 SAML 客户端,布尔值指定是否需要客户端签名并进行验证。 |
|
布尔值指定是否应使用客户端的公钥加密 SAML 断言。 |
|
对于 SAML 客户端,布尔值指定是否始终将 POST 绑定用于响应。 |
|
对于 SAML 客户端,布尔值指定登录响应中是否应包含 OneTimeUse 条件。 |
|
布尔值指定 SAML 文档是否应由领域签名。 |
|
对于 SAML 客户端,布尔值指定是否应通过在 SAML 扩展元素中包含签名密钥 ID 来优化 REDIRECT 签名密钥查找。 |
|
用于签名 SAML 文档的签名算法。可以是 |
|
SAML 签名密钥证书,base64 编码。 |
|
SAML 签名密钥私钥,base64 编码。 |
|
客户端断言使用者服务(登录响应)的 SAML POST 绑定 URL。 |
|
客户端断言使用者服务(登录响应)的 SAML 重定向绑定 URL。 |
|
对于 SAML 客户端,布尔值指定是否忽略请求的 NameID 主题格式,而是使用配置的格式。 |
|
对于 SAML 客户端,要使用的 NameID 格式(可以是 |
|
SAML 签名规范化方法。这是四个值中的一个,即 |
|
客户端单点注销服务的 SAML POST 绑定 URL。 |
|
客户端单点注销服务的 SAML 重定向绑定 URL。 |
|
对于 OpenID Connect 客户端,布尔值,指定是否使用 JWKS URL 来获取客户端公钥。 |
|
对于 OpenID Connect 客户端,用于签名 UserInfo 端点响应的 JWA 算法。 可选值包括 |
|
对于 OpenID Connect 客户端,布尔值,指定是否允许 选项
|
|
对于 OpenID Connect 客户端,用于验证客户端身份的主题。 |
|
用于向 API 进行身份验证的 OpenID Connect 默认值: |
|
与 |
|
Keycloak 实例的 URL。 |
|
用于进行 API 访问身份验证的密码。 |
|
用于进行 API 访问身份验证的 Keycloak realm 名称。 |
|
用于进行 API 访问身份验证的用户名。 |
|
覆盖 realm 身份验证流程绑定。 |
|
浏览器身份验证流程的流程 ID。
|
|
是否为此客户端启用了授权服务(OpenID Connect)。 这是 Keycloak REST API 中的 “authorizationServicesEnabled”。 选项
|
|
定义此客户端的授权设置的数据结构。 有关参考,请参阅 Keycloak API 文档,网址为 https://keycloak.java.net.cn/docs-api/8.0/rest-api/index.html#_resourceserverrepresentation。 这是 Keycloak REST API 中的 “authorizationSettings”。 |
|
当身份验证服务器需要重定向或链接回客户端时,要使用的默认 URL。 这是 Keycloak REST API 中的 “baseUrl”。 |
|
此客户端的访问类型为仅承载令牌。 这是 Keycloak REST API 中的 “bearerOnly”。 选项
|
|
客户端如何使用身份验证服务器进行身份验证? 可以选择 这是 Keycloak REST API 中的 “clientAuthenticatorType”。 选项
|
|
用于此客户端的客户端模板。 如果它不存在,此字段将被静默删除。 这是 Keycloak REST API 中的 “clientTemplate”。 |
|
控制与 Keycloak API 的 HTTP 连接超时时间段(以秒为单位)。 默认值: |
|
如果启用,用户必须同意客户端访问。 这是 Keycloak REST API 中的 “consentRequired”。 选项
|
|
默认客户端作用域的列表。 |
|
此客户端的默认角色列表。 如果引用的客户端角色尚不存在,将创建它们。 这是 Keycloak REST API 中的 “defaultRoles”。 |
|
Keycloak 中客户端的描述。 |
|
是否为此客户端启用了直接访问授权(OpenID Connect)。 这是 Keycloak REST API 中的 “directAccessGrantsEnabled”。 选项
|
|
是否启用此客户端? 选项
|
|
是否为此客户端启用了前通道注销。 这是 Keycloak REST API 中的 “frontchannelLogout”。 选项
|
|
是否为此客户端设置了“允许完全作用域”功能。 这是 Keycloak REST API 中的 “fullScopeAllowed”。 选项
|
|
配置 HTTP User-Agent 标头。 默认值: |
|
要操作的客户端的 ID。通常是 UUID。此参数或 |
|
启用或禁用此客户端的隐式流(OpenID 连接)。这对应 Keycloak REST API 中的 ‘implicitFlowEnabled’。 选项
|
|
客户端的名称(与 |
|
此客户端的集群节点重新注册超时时间。这对应 Keycloak REST API 中的 ‘nodeReRegistrationTimeout’。 |
|
撤销在此日期之前为此客户端颁发的所有令牌(这是一个 UNIX 时间戳)。这对应 Keycloak REST API 中的 ‘notBefore’。 |
|
可选客户端作用域列表。 |
|
客户端类型。 仅在创建时有效,如果省略
选项
|
|
一个字典列表,定义此客户端的协议映射器。这对应 Keycloak REST API 中的 ‘protocolMappers’。 |
|
字典,用于指定协议映射器的配置选项;内容取决于 |
|
指定用户是否需要为该映射器处于活动状态而向客户端提供同意。 选项
|
|
用户将看到并接受的同意的人类可读名称。 |
|
通常是一个 UUID,指定此协议映射器实例的内部 ID。 |
|
此协议映射器的名称。 |
|
指定此协议映射器处于活动状态的协议。 选项
|
|
此协议映射器类型的 Keycloak 内部名称。虽然不可能提供详尽的列表,因为用户可以通过 SPI 扩展 Keycloak,但默认情况下,Keycloak 从 3.4 版本开始至少包含以下映射器:
在管理控制台中,转到“服务器信息”->“提供程序”,然后在“协议映射器”下查找,即可获取安装中可用的映射器的详尽列表。 |
|
此客户端的访问类型是否为公共类型。这对应 Keycloak REST API 中的 ‘publicClient’。 选项
|
|
要在其中创建客户端的 realm。 默认值: |
|
此客户端可接受的重定向 URI。这对应 Keycloak REST API 中的 ‘redirectUris’。 |
|
已注册的集群节点字典(以 |
|
注册访问令牌为客户端提供对客户端注册服务的访问权限。这对应 Keycloak REST API 中的 ‘registrationAccessToken’。 |
|
附加到此客户端的相对 URL 的根 URL。这对应 Keycloak REST API 中的 ‘rootUrl’。 |
|
当使用 |
|
是否为此客户端启用服务帐户(OpenID 连接)。这对应 Keycloak REST API 中的 ‘serviceAccountsEnabled’。 选项
|
|
启用或禁用此客户端的标准流(OpenID 连接)。这对应 Keycloak REST API 中的 ‘standardFlowEnabled’。 选项
|
|
客户端的状态 在 在 选项
|
|
是否需要代理身份验证。这对应 Keycloak REST API 中的 ‘surrogateAuthRequired’。 选项
|
|
Keycloak API 的身份验证令牌。 |
|
验证 TLS 证书(不要在生产环境中禁用此选项)。 选项
|
|
允许的 CORS 来源列表。这对应 Keycloak REST API 中的 ‘webOrigins’。 |
属性
属性 |
支持 |
描述 |
---|---|---|
支持: 完全 |
可以在 |
|
支持: 完全 |
当处于差异模式时,将返回已更改(或可能需要在 |
示例
- name: Create or update Keycloak client (minimal example), authentication with credentials
community.general.keycloak_client:
auth_keycloak_url: https://auth.example.com/auth
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
client_id: test
state: present
delegate_to: localhost
- name: Create or update Keycloak client (minimal example), authentication with token
community.general.keycloak_client:
auth_client_id: admin-cli
auth_keycloak_url: https://auth.example.com/auth
auth_realm: master
token: TOKEN
client_id: test
state: present
delegate_to: localhost
- name: Delete a Keycloak client
community.general.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
delegate_to: localhost
- name: Create or update a Keycloak client (minimal example), with x509 authentication
community.general.keycloak_client:
auth_client_id: admin-cli
auth_keycloak_url: https://auth.example.com/auth
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
realm: master
state: present
client_id: test
client_authenticator_type: client-x509
attributes:
x509.subjectdn: "CN=client"
x509.allow.regex.pattern.comparison: false
- name: Create or update a Keycloak client (with all the bells and whistles)
community.general.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/*
- https://127.0.0.1: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: false
always_display_in_console: true
registered_nodes:
node01.example.com: 1507828202
registration_access_token: eyJWT_TOKEN
surrogate_auth_required: false
default_roles:
- test01
- test02
authentication_flow_binding_overrides:
browser: 4c90336b-bf1d-4b87-916d-3677ba4e5fbb
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
delegate_to: localhost
返回值
常用的返回值记录在这里,以下是此模块独有的字段
键 |
描述 |
---|---|
模块执行后客户端的表示形式(示例已截断)。 返回: 成功时 示例: |
|
现有客户端的表示形式(示例已截断)。 返回: 始终 示例: |
|
关于采取了什么操作的消息。 返回: 始终 示例: |
|
提议的客户端的表示形式。 返回: 始终 示例: |