Zabbix
Zabbix 作为 SAML 服务提供商(SP),Casdoor 作为身份提供商(IdP)。两者通过 SAML 2.0 实现单点登录(SSO)进入 Zabbix。
第 1 步:部署 Casdoor 和 Zabbix
部署 Casdoor 和 Zabbix。确认两者都在运行,并且都能登录。
第 2 步:添加证书
为了保证通信安全,需要在 Zabbix 和 Casdoor 之间配置证书。除非在 zabbix.conf.php 中指定了自定义路径,私钥和证书 应放在 /etc/zabbix/conf/certs/ 目录下。
默认情况下,zabbix - web - nginx - mysql Docker 容器会查 找以下位置:
/etc/zabbix/conf/certs/sp.key:SP 私钥文件/etc/zabbix/conf/certs/sp.crt:SP 证书文件/etc/zabbix/conf/certs/idp.crt:IdP 证书文件
在 Casdoor 中创建证书:登录 Casdoor 管理界面,按系统提示创建两个证书。这两个证书用于加密 Zabbix 与 Casdoor 之间的通信。

复制证书和私钥:把证书和私钥复制到 /etc/zabbix/conf/certs。如果用 Docker,把本地证书文件挂载到容器中。
第 3 步:配置 Zabbix
在 Zabbix 中配置 SAML 需要填写三个必填字段:Single Sign - On、Issuer 和 Public Certificate。
登录 Zabbix 管理界面,点击 User -> authentication -> SAML settings。

按 Casdoor 配置中的 SAML 元数据配置 Zabbix:
- idP entity ID(Issuer):对应
entityID="http://localhost:8000"。这个值是 Casdoor 的 entity ID,Zabbix 会据此与 Casdoor 通信。 - SSO service URL:对应
Location="http://localhost:8000/api/saml/redirect/admin/zabbix"。这是 Casdoor 提供的 SSO 服务地址。用户在 Zabbix 中发起 SSO 请求时,会被跳转到这个地址认证。 - username attribute:登录 Zabbix 时用作用户名的 SAML 属性。这里用的是
Name,表示 Zabbix 会把 SAML 断言中的Name属性作为用户的登录名。 - SP entity ID:SP 的唯一 ID,可以随意设置。这个 ID 用来标识 Zabbix 服务提供商,需要与 Casdoor 中的配置一致。
第 4 步:配置 Casdoor
需要在 Casdoor 中做一些必要的配置,保证与 Zabbix 的集成正常工作。
编辑名称和 Logo:登录 Casdoor 管理界面,找到相应设置,编辑应用的名称和 Logo,让用户看到的界面更友好。

选择证书:在 Casdoor 中选择 zabbix_idp 作为签名和加密 SAML 消息的证书,保证通信安全。
Redirect URL:填写用来标识你的 SP(Zabbix)的值。在 Zabbix 中它可能叫 Audience 或 Entity ID。它必须与 Zabbix 中的 SP entity ID 一致,否则 SSO 会失败。
Reply URL:填写用于校验 SAML 响应的 ACS(Assertion Consumer Service)地址。这是 Zabbix 接收 Casdoor 发来的 SAML 断言的地址。

第 5 步:创建 Zabbix 用户
在 Zabbix 中创建一个测试用户来验证 SSO。
- 登录 Zabbix 管理界面,找到用户管理模块。
- 创建一个用户(例如用户名
test)。

第 6 步:创建 Casdoor 用户
在 Casdoor 中添加一个与 Zabbix 中用户名相同的用户。
- 登录 Casdoor 管理界面,找到用户管理模块。
- 添加一个与 Zabbix 中用户名相同的新用户。
- 选择 Zabbix,并填写用户的邮箱地址。

第 7 步:Zabbix 登录流程
完成以上步骤后,测试 SSO。
打开浏览器访问 localhost/index.php。

点击 Sign in with Single Sign - On(SAML)。
你会被跳转到 Casdoor,输入用户名和密码登录。

登录成功后会跳回 https://localhost:8080/zabbix.index.php,说明 SSO 已生效。

完成这些步骤后,Zabbix 与 Casdoor 的 SSO 集成就完成了。遇到问题请参考相关文档或社区论坛。