community.general.keycloak_identity_provider 模块 – 通过 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_identity_provider

community.general 3.6.0 中的新增功能

摘要

  • 此模块允许您通过 Keycloak REST API 添加、删除或修改 Keycloak 身份提供程序。它需要通过 OpenID Connect 访问 REST API;连接的用户和使用的客户端必须具有必要的访问权限。在默认的 Keycloak 安装中,admin-cli 和管理员用户都可以工作,单独的客户端定义(其作用域根据您的需求定制)和具有预期角色的用户也可以工作。

  • 模块选项的名称是 Keycloak API 及其文档 (https://keycloak.java.net.cn/docs-api/15.0/rest-api/index.html) 中的 camelCase 名称的 snake_case 版本。

参数

参数

注释

add_read_token_role_on_create

别名:addReadTokenRoleOnCreate

布尔值

启用/禁用新用户是否可以读取任何存储的令牌。这将分配 broker.read-token 角色。

选项

  • false

  • true

别名

字符串 / 必需

别名唯一标识身份提供程序,也用于构建重定向 URI。

auth_client_id

字符串

用于使用 OpenID Connect client_id 进行身份验证。

默认值: "admin-cli"

auth_client_secret

字符串

auth_client_id 结合使用的客户端密钥(如果需要)。

auth_keycloak_url

别名:url

字符串 / 必需

Keycloak 实例的 URL。

auth_password

别名:password

字符串

用于 API 访问身份验证的密码。

auth_realm

字符串

用于 API 访问身份验证的 Keycloak realm 名称。

auth_username

别名:username

字符串

用于 API 访问身份验证的用户名。

authenticate_by_default

别名:authenticateByDefault

布尔值

指定此身份提供程序是否应默认用于身份验证,即使在显示登录屏幕之前。

选项

  • false

  • true

config

字典

指定提供程序配置选项的字典;内容取决于 provider_id 的值。下面给出了 oidcsaml 的示例。通过在 existing 字段中使用检查模式转储已存在的身份提供程序配置,最容易获得有效的配置值。

authorizationUrl

字符串

授权 URL。

backchannelSupported

字符串

外部 IDP 是否支持后台注销?

clientAuthMethod

字符串

客户端身份验证方法。

clientId

字符串

在身份提供程序中注册的客户端或客户端标识符。

clientSecret

字符串

在身份提供程序中注册的客户端或客户端密钥。

defaultScope

字符串

请求授权时要发送的作用域。

entityId

字符串

将用于唯一标识此 SAML 服务提供程序的实体 ID。

gui_order

别名:guiOrder

整数

定义提供程序在 GUI 中的顺序的数字(例如,在登录页面上)。

hide_on_login_page

别名:hideOnLoginPage

布尔值

如果隐藏,只有在显式请求时才能使用此提供程序登录,例如使用kc_idp_hint参数。

选项

  • false

  • true

issuer (颁发者)

字符串

响应颁发者的颁发者标识符。如果未提供,则不会执行验证。

jwksUrl

字符串

存储 JWK 格式身份提供程序密钥的 URL。有关详细信息,请参阅 JWK 规范。

logoutUrl (注销 URL)

字符串

用于注销外部 IDP 中用户的会话结束端点。

nameIDPolicyFormat

字符串

指定与名称标识符格式对应的 URI 引用。

principalType (主体类型)

字符串

从断言中识别和跟踪外部用户的方法。

singleLogoutServiceUrl (单点注销服务 URL)

字符串

必须用于发送注销请求的 URL。

singleSignOnServiceUrl (单点登录服务 URL)

字符串

必须用于发送身份验证请求 (SAML AuthnRequest) 的 URL。

sync_mode (同步模式)

别名:syncMode

字符串

所有映射器的默认同步模式。同步模式决定何时使用映射器同步用户数据。

tokenUrl (令牌 URL)

字符串

令牌 URL。

useJwksUrl

布尔值

如果启用此开关,则身份提供程序公钥将从给定的 JWKS URL 下载。

选项

  • false

  • true

userInfoUrl (用户信息 URL)

字符串

用户信息 URL。

validateSignature (验证签名)

布尔值

启用/禁用外部 IDP 签名的签名验证。

选项

  • false

  • true

connection_timeout (连接超时)

整数

在 community.general 4.5.0 中添加

控制到 Keycloak API 的 HTTP 连接超时时间(以秒为单位)。

默认值:10

display_name (显示名称)

别名:displayName

字符串

身份提供程序的友好名称。

enabled (启用)

布尔值

启用/禁用此身份提供程序。

选项

  • false

  • true

first_broker_login_flow_alias (首次代理登录流程别名)

别名:firstBrokerLoginFlowAlias

字符串

使用此身份提供程序首次登录后触发的身份验证流程的别名。

http_agent

字符串

在 community.general 5.4.0 中添加

配置 HTTP User-Agent 标头。

默认值:"Ansible"

link_only (仅链接)

别名:linkOnly

布尔值

如果为 true,则用户无法通过此提供程序登录。他们只能链接到此提供程序。如果您不想允许从提供程序登录,但想与提供程序集成,这将非常有用。

选项

  • false

  • true

mappers (映射器)

列表 / 元素=字典

定义与此身份提供程序关联的映射器的字典列表。

config

字典

指定映射器配置选项的字典;内容取决于mappers[].identityProviderMapper的值。

id (ID)

字符串

此映射器的唯一 ID。

identityProviderAlias (身份提供程序别名)

字符串

此映射器的身份提供程序的别名。

identityProviderMapper (身份提供程序映射器)

字符串

映射器的类型。

name (名称)

字符串

映射器的名称。

post_broker_login_flow_alias (代理登录后流程别名)

别名:postBrokerLoginFlowAlias

字符串

每次使用此身份提供程序登录后触发的身份验证流程的别名。

provider_id (提供程序 ID)

别名:providerId

字符串

此提供程序使用的协议(支持的值为oidcsaml)。

realm (领域)

字符串

此身份提供程序所在的 Keycloak 领域。

默认值:"master"

state (状态)

字符串

身份提供程序的状态。

对于present,如果身份提供程序尚不存在,则会创建它,或者使用您提供的参数进行更新。

对于absent,如果身份提供程序存在,则将其删除。

选项

  • "present" ← (默认)

  • "absent"

store_token (存储令牌)

别名:storeToken

布尔值

启用/禁用是否必须在身份验证用户后存储令牌。

选项

  • false

  • true

token (令牌)

字符串

在 community.general 3.0.0 中添加

Keycloak API 的身份验证令牌。

trust_email (信任邮箱)

别名:trustEmail

布尔值

如果启用,即使为领域启用了验证,此提供程序提供的邮箱也不会被验证。

选项

  • false

  • true

validate_certs (验证证书)

布尔值

验证 TLS 证书(不要在生产环境中禁用此功能)。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode (检查模式)

支持:完全支持

可以在check_mode下运行,并在不修改目标的情况下返回更改状态预测。

diff_mode (差异模式)

支持:完全支持

处于差异模式时,将返回有关已更改内容(或可能需要在check_mode中更改的内容)的详细信息。

示例

- name: Create OIDC identity provider, authentication with credentials
  community.general.keycloak_identity_provider:
    state: present
    auth_keycloak_url: https://auth.example.com/auth
    auth_realm: master
    auth_username: admin
    auth_password: admin
    realm: myrealm
    alias: oidc-idp
    display_name: OpenID Connect IdP
    enabled: true
    provider_id: oidc
    config:
      issuer: https://idp.example.com
      authorizationUrl: https://idp.example.com/auth
      tokenUrl: https://idp.example.com/token
      userInfoUrl: https://idp.example.com/userinfo
      clientAuthMethod: client_secret_post
      clientId: my-client
      clientSecret: secret
      syncMode: FORCE
    mappers:
      - name: first_name
        identityProviderMapper: oidc-user-attribute-idp-mapper
        config:
          claim: first_name
          user.attribute: first_name
          syncMode: INHERIT
      - name: last_name
        identityProviderMapper: oidc-user-attribute-idp-mapper
        config:
          claim: last_name
          user.attribute: last_name
          syncMode: INHERIT

- name: Create SAML identity provider, authentication with credentials
  community.general.keycloak_identity_provider:
    state: present
    auth_keycloak_url: https://auth.example.com/auth
    auth_realm: master
    auth_username: admin
    auth_password: admin
    realm: myrealm
    alias: saml-idp
    display_name: SAML IdP
    enabled: true
    provider_id: saml
    config:
      entityId: https://auth.example.com/auth/realms/myrealm
      singleSignOnServiceUrl: https://idp.example.com/login
      wantAuthnRequestsSigned: true
      wantAssertionsSigned: true
    mappers:
      - name: roles
        identityProviderMapper: saml-user-attribute-idp-mapper
        config:
          user.attribute: roles
          attribute.friendly.name: User Roles
          attribute.name: roles
          syncMode: INHERIT

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

end_state (最终状态)

字典

模块执行后身份提供程序的表示。

返回:成功时

示例:{"addReadTokenRoleOnCreate": false, "alias": "my-idp", "authenticateByDefault": false, "config": {"authorizationUrl": "https://idp.example.com/auth", "clientAuthMethod": "client_secret_post", "clientId": "my-client", "clientSecret": "**********", "issuer": "https://idp.example.com", "tokenUrl": "https://idp.example.com/token", "userInfoUrl": "https://idp.example.com/userinfo"}, "displayName": "OpenID Connect IdP", "enabled": true, "firstBrokerLoginFlowAlias": "first broker login", "internalId": "4d28d7e3-1b80-45bb-8a30-5822bf55aa1c", "linkOnly": false, "providerId": "oidc", "storeToken": false, "trustEmail": false}

existing (现有状态)

字典

现有身份提供程序的表示。

返回:始终返回

示例:{"addReadTokenRoleOnCreate": false, "alias": "my-idp", "authenticateByDefault": false, "config": {"authorizationUrl": "https://old.example.com/auth", "clientAuthMethod": "client_secret_post", "clientId": "my-client", "clientSecret": "**********", "issuer": "https://old.example.com", "syncMode": "FORCE", "tokenUrl": "https://old.example.com/token", "userInfoUrl": "https://old.example.com/userinfo"}, "displayName": "OpenID Connect IdP", "enabled": true, "firstBrokerLoginFlowAlias": "first broker login", "internalId": "4d28d7e3-1b80-45bb-8a30-5822bf55aa1c", "linkOnly": false, "providerId": "oidc", "storeToken": false, "trustEmail": false}

msg (消息)

字符串

关于采取了什么行动的消息。

返回:始终返回

示例:"Identity provider my-idp has been created"

proposed (建议状态)

字典

建议的身份提供程序的表示。

返回:始终返回

示例:{"config": {"authorizationUrl": "https://idp.example.com/auth", "clientAuthMethod": "client_secret_post", "clientId": "my-client", "clientSecret": "secret", "issuer": "https://idp.example.com", "tokenUrl": "https://idp.example.com/token", "userInfoUrl": "https://idp.example.com/userinfo"}, "displayName": "OpenID Connect IdP", "providerId": "oidc"}

作者

  • Laurent Paumier (@laurpaum)