13 使用 Okta 设置 SAML
本节提供了配置 Okta 的指导,以为 Zabbix 启用 SAML 2.0 身份验证和用户预配。
Okta 配置
1. 前往 https://developer.okta.com/signup/ 并注册/登录您的账户。
2. 在 Okta Web 界面中,导航到 Applications → Applications。
3. 点击 Create App Integration。

选择 “SAML 2.0” 作为登录方法,然后点击 Next。
4. 在常规设置中,填写应用名称并点击 Next。
5. 在 SAML 配置中,输入以下提供的值,然后点击 Next。

-
在 General 中添加:
- Single sign-on URL:
http://<your-zabbix-url>/zabbix/index_sso.php?acs
请注意这里使用的是 “http” 而不是 “https”,这样请求中的acs参数才不会被截掉。 同时还应勾选 Use this for Recipient URL and Destination URL 复选框。 - Audience URI (SP Entity ID):
zabbix
请注意,此值将在 SAML 断言中用作唯一的服务提供者标识符(如果不匹配,操作将被拒绝)。 此字段中可以指定 URL 或任意字符串数据。 - Default RelayState:
将此字段留空;如果需要自定义重定向,可在 Zabbix 的 Users > Users 设置中添加。 - 根据您的偏好填写其他字段。
- Single sign-on URL:
-
在 Attribute Statements/Group Attribute Statements 中添加:

这些属性声明会被插入到与 Zabbix 共享的 SAML 断言中。
此处使用的属性名称只是任意示例。 您可以使用不同的属性名称,但必须与 Zabbix SAML 设置中相应字段的值匹配。
如果您希望在 不使用 JIT 用户预配的情况下为 Zabbix 配置 SAML 登录,则只需要 email 属性。
如果计划使用加密连接,请先生成私有和公共加密证书,然后将公钥证书上传到 Okta。 当 Assertion Encryption 设置为 “Encrypted” 时,将显示证书上传表单(点击 Show Advanced Settings 可找到此参数)。
6. 在下一个选项卡中,选择 “I'm a software vendor. I'd like to integrate my app with Okta”,然后点击 Finish。
7. 导航到新创建应用程序的 “Assignments” 选项卡, 点击 Assign 按钮,然后从下拉菜单中选择 “Assign to People”。

8. 在弹出的窗口中,将该应用分配给将使用 SAML 2.0 通过 Zabbix 进行身份验证的用户,然后点击 Save and go back。
9. 下载 IdP 证书。 通过运行以下命令将其权限设置为 644:
chmod 644 idp.crt
10. 导航到 “Sign On” 选项卡并点击 View Setup Instructions 按钮。
设置说明将在新选项卡中打开;在配置 Zabbix 时请保持此选项卡处于打开状态。
Zabbix 配置
1. 在 Zabbix 中,前往 SAML 设置,并根据 Okta 中的设置说明填写配置选项:

| Zabbix 字段 | Okta 中的设置字段 | 示例值 |
|---|---|---|
| IdP entity ID | Identity Provider Issuer | |
| SSO service URL | Identity Provider Single Sign-On URL | |
| Username attribute | Attribute name | usrEmail |
| SP entity ID | Audience URI | zabbix |
| Group name attribute | Attribute name | groups |
| User name attribute | Attribute name | user_name |
| User last name attribute | Attribute name | user_lastname |
还需要配置用户组和媒体映射。
2. 添加 Okta SAML 设置说明中提供的 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 读取证书。
3. 如果在 Okta 中将 Assertion Encryption 设置为 “Encrypted”,则还应在 Zabbix 中勾选 Encrypt 参数的 “Assertions” 复选框。
4. 单击 Update 按钮以保存这些设置。
SCIM 配置
1. 要启用 SCIM 配置,请前往 Okta 中该应用程序的“General”->“App Settings”。
勾选 Enable SCIM provisioning 复选框。 完成后,将出现一个新的 Provisioning 选项卡。
2. 前往“Provisioning”选项卡以设置 SCIM 连接:
- 在 SCIM connector base URL 中指定 Zabbix 前端 的路径,并在其后追加
api_scim.php,即:
https://<your-zabbix-url>/zabbix/api_scim.php - Unique identifier field for users:
email - Authentication mode:
HTTP header - 在 Authorization 中输入具有超级管理员权限的有效 API token

如果您遇到身份验证问题,请参见 Authorization header forwarding。
3. 点击 Test Connector Configuration 以测试连接。 如果一切正确,将显示成功消息。
4. 在“Provisioning”->“To App”中,确保勾选以下复选框:
- Create Users
- Update User Attributes
- Deactivate Users
这样可确保这些类型的请求会被发送到 Zabbix。
5. 确保在 SAML 中定义的所有属性也都在 SCIM 中定义。 您可以在“Provisioning”->“To App”中点击 Go to Profile Editor,访问应用的配置文件编辑器。
点击 Add Attribute。
将 Display name、Variable name、External name 的值填写为 SAML 属性名称,例如 user_name。

External namespace 应与用户 schema 相同:urn:ietf:params:scim:schemas:core:2.0:User
6. 前往您的应用程序中的“Provisioning”->“To App”->“Attribute Mappings”。 点击底部的 Show Unmapped Attributes。 新添加的属性将会显示出来。
7. 映射每个新增属性。

8. 在“Assignments”选项卡中添加用户。 这些用户需要预先添加到 Directory -> People 中。 所有这些分配都会作为请求发送到 Zabbix。
9. 在“Push Groups”选项卡中添加组。 Zabbix SAML 设置中的用户组映射模式必须与此处指定的某个组匹配。 如果没有匹配项,则无法在 Zabbix 中创建用户。
每当组成员发生某些更改时,组成员信息都会被发送。