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)驼峰式命名法的蛇形化版本。

参数

参数

注释

add_read_token_role_on_create

别名:addReadTokenRoleOnCreate

布尔值

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

选项

  • false

  • true

别名

字符串 / 必需

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

auth_client_id

字符串

用于向 API 进行身份验证的 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

字符串

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

nameIDPolicyFormat

字符串

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

principalType

字符串

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

singleLogoutServiceUrl

字符串

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

singleSignOnServiceUrl

字符串

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

sync_mode

别名:syncMode

字符串

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

tokenUrl

字符串

令牌 URL。

useJwksUrl

布尔值

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

选项

  • false

  • true

userInfoUrl

字符串

用户信息 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

布尔值

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

选项

  • false

  • true

mappers

列表 / 元素=字典

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

config

字典

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

id

字符串

此映射器的唯一 ID。

identityProviderAlias

字符串

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

identityProviderMapper

字符串

映射器类型。

name

字符串

映射器的名称。

post_broker_login_flow_alias

别名:postBrokerLoginFlowAlias

字符串

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

provider_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)