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.com.cn/docs-api/8.0/rest-api/index.html)中找到的 camelCase 版本的 snake_cased 版本。提供别名以便也可以使用 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 条件。 | |
| 布尔值,指定是否应由 realm 对 SAML 文档进行签名。 | |
| 对于 SAML 客户端,布尔值,指定是否应通过在 SAML Extensions 元素中包含签名密钥 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 领域名称。 | |
| 用于 API 访问的身份验证的用户名。 | |
| 覆盖领域身份验证流绑定。 | |
| 浏览器身份验证流的流 ID。 
 | |
| 是否为此客户端启用了授权服务(OpenID Connect)。这是 Keycloak REST API 中的“authorizationServicesEnabled”。 选择 
 | |
| 定义此客户端授权设置的数据结构。有关参考,请参阅 Keycloak API 文档,网址为 https://keycloak.com.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 连接)。这在 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’。 | |
| 指定协议映射器的配置选项的字典;内容取决于  | |
| 指定用户是否需要为该映射器向客户端提供同意才能使其生效。 选择 
 | |
| 呈现给用户接受的同意的人类可读名称。 | |
| 通常是指定此协议映射器实例内部 ID 的 UUID。 | |
| 此协议映射器的名称。 | |
| 指定此协议映射器生效的协议。 选择 
 | |
| 此协议映射器类型的 Keycloak 内部名称。由于 Keycloak 用户可以通过 SPI 扩展此名称,因此不可能提供详尽的列表,但默认情况下,Keycloak 3.4 至少附带以下内容: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 可以通过转到管理控制台的“服务器信息” -> “提供程序”,并在“协议映射器”下查找,来获取安装上可用的映射器的详尽列表。 | |
| 此客户端的访问类型是否为公共类型。这在 Keycloak REST API 中为 ‘publicClient’。 选择 
 | |
| 要在其中创建客户端的域。 默认值:  | |
| 此客户端的可接受的重定向 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’。 | 
属性
| 属性 | 支持 | 描述 | 
|---|---|---|
| 支持: 完全 | 可以在  | |
| 支持: 完全 | 当处于 diff 模式时,将返回有关已更改内容(或在  | 
示例
- 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://: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
返回值
常用的返回值记录在 这里,以下是此模块特有的字段
| 键 | 描述 | 
|---|---|
| 模块执行后客户端的表示形式(示例已截断)。 已返回: 成功时 示例:  | |
| 现有客户端的表示形式(示例已截断)。 已返回: 始终 示例:  | |
| 关于执行的操作的消息。 已返回: 始终 示例:  | |
| 建议的客户端的表示形式。 已返回: 始终 示例:  | 
