14 使用 OneLogin 设置 SAML

概述

本节提供使用 SAML 2.0 身份验证从 OneLogin 配置单点登录和 Zabbix 用户配置的指南。

OneLogin 配置

创建应用程序

1. 登录您的 OneLogin 账户。
出于测试目的,您可以在 OneLogin 创建一个免费的开发者账户。

2. 在 OneLogin web 界面中,导航至 Applications → Applications

3. 单击“Add App”并搜索相应的应用程序。
本页中的指南基于 SCIM Provisioner with SAML (SCIM v2 Enterprise, full SAML) 应用程序示例。

4. 首先,您可能需要自定义应用程序的显示名称。
您也可以添加图标和应用程序详细信息。
完成后,单击 Save

设置 SSO/SCIM 配置

1. 在 Configuration -> Application details 中,将 Zabbix 单点登录端点 http://<zabbix-instance-url>/zabbix/index_sso.php?acs 设置为以下字段的值:

  • ACS (Consumer) URL Validator
  • ACS (Consumer) URL

请注意这里使用的是 "http" 而不是 "https",这样请求中的 acs 参数才不会被截掉。

也可以使用 "https"。 要使其在 Zabbix 中正常工作,需要在 conf/zabbix.conf.php 中添加以下一行:

$SSO['SETTINGS'] = ['use_proxy_headers' => true];

其他选项保持默认值即可。

2. 在 Configuration -> API connection 中,设置以下值:

  • SCIM Base URL: https://<zabbix-instance-url>/zabbix/api_scim.php
  • SCIM JSON Template: 应包含所有希望通过 SCIM 传递给 Zabbix 的自定义属性,例如 user_nameuser_lastnameuser_emailuser_mobile
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User"
  ],
  "userName": "{$parameters.scimusername}",
  "name": {
    "familyName": "{$user.lastname}",
    "givenName": "{$user.firstname}"
  },
   "user_name": "{$user.firstname}",
   "user_lastname": "{$user.lastname}",
   "user_mobile": "{$user.phone}",
   "user_email": "{$user.email}"
}

属性名称是任意的。 可以使用不同的属性名称,但必须与 Zabbix SAML 设置中相应字段的值匹配。

请注意,要使用户配置生效,OneLogin 需要在响应中接收到带有 givenNamefamilyNamename 属性,即使服务提供方并未要求该属性。 因此,必须在应用程序配置部分的 schema 中指定这一点。

  • SCIM Bearer Token: 输入一个具有超级管理员权限的 Zabbix API token。

点击 Enable 以激活连接。

3. 在 Provisioning 页面中,启用 Provisioning 选项:

4. Parameters 页面包含默认参数列表:

  • 确保 'scimusername' 与 OneLogin 中的用户登录值一致(例如电子邮件);
  • 为 'Groups' 参数勾选 Include in User Provisioning 选项;
  • 点击 "+" 创建 SAML 断言和用户配置所需的自定义参数,例如 user_nameuser_lastnameuser_emailuser_mobile

添加参数时,请确保同时勾选 Include in SAML assertionInclude in User Provisioning 选项。

  • 添加一个与 OneLogin 中用户角色匹配的 'group' 参数。 用户角色将作为字符串传递,并以分号 ; 分隔。 OneLogin 用户角色将用于在 Zabbix 中创建用户组:

验证参数列表:

5. 在 Rules 页面中,为默认的 Groups 参数创建用户角色映射。

您可以使用正则表达式将特定角色作为组传递。 角色名称不应包含 ;,因为 OneLogin 在发送包含多个角色的属性时会将其用作分隔符。

6. 下载 IdP 证书。 运行以下命令将其权限设置为 644:

chmod 644 idp.crt

Zabbix 配置

1. 在 Zabbix 中,前往 SAML 设置,并根据 OneLogin 配置填写相应的配置选项:

Zabbix 字段 OneLogin 中的设置字段 示例值
IdP 实体 ID Issuer URL
(请参见 OneLogin 中应用程序的 SSO 选项卡)
SSO 服务 URL SAML 2.0 Endpoint (HTTP)
(请参见 OneLogin 中应用程序的 SSO 选项卡)
SLO 服务 URL SLO Endpoint (HTTP)
(请参见 OneLogin 中应用程序的 SSO 选项卡)
用户名属性 自定义参数 user_email
组名属性 自定义参数 group
用户名字属性 自定义参数 user_name
用户姓氏属性 自定义参数 user_lastname

还需要配置用户组映射。 介质映射为可选项。 单击 Update 以保存这些设置。

2. 添加 OneLogin 提供的 Base64 证书。

如果在 zabbix.conf.php 中设置了 $SSO['CERT_STORAGE'] = 'database',则可以在 SAML 配置期间通过前端粘贴证书文本或上传证书文件——无需在文件系统中提供任何文件。

如果在 zabbix.conf.php 中设置了 $SSO['CERT_STORAGE'] = 'file',则必须确保可在文件系统中访问该证书(默认位于 ui/conf/certs,或位于 zabbix.conf.php 中配置的路径),并且前端不会将证书存储在数据库中。
请注意,如果未设置 $SSO['CERT_STORAGE'] 或将其注释掉,则默认使用文件存储,并从 ui/conf/certs 读取证书。

您可以在 OneLogin 中通过 Applications -> SSO -> 单击当前证书下方的 View details 来访问证书下载。

3. 按 Update 按钮以保存这些设置。

SCIM 用户预配

启用用户预配后,现在可以在 OneLogin 中添加/更新用户及其角色,并将其立即预配到 Zabbix。

例如,您可以创建一个新用户:

将其添加到用户角色以及将为该用户执行预配的应用程序中:

保存用户时,该用户将被预配到 Zabbix。 在 Application -> Users 中,您可以检查当前应用程序用户的预配状态:

如果预配成功,则可以在 Zabbix 用户列表中看到该用户。