authentication - 使用 Keycloak-proxy 进行 Zabbix HTTP 身份验证

标签 authentication keycloak zabbix openid-connect keycloak-gatekeeper

我尝试使用 keycloak-proxy 将 Zabbix UI 与 Keycloak SSO 集成。 我的设置如下:

  1. Nginx 是入口点:它处理“虚拟主机”,将请求转发到 keycloak-proxy。
  2. Keyclock-proxy 配置了 client_id、client_secret 等,用于向 Keycloak 验证用户身份;
  3. Apache 上的 Zabbix 仪表板,默认设置:我启用 HTTP 身份验证。

我在 Keycloak 和 Zabbix 中创建了一个测试用户。 身份验证流程正常:我被重定向到 KeyCloak,我进行身份验证,但我总是收到“登录名或密码不正确”。来自 Zabbix UI。

我做错了什么? 有人尝试过在 Zabbix 中使用 OIDC 身份验证吗?

我正在使用 Zabbix 4.0、KeyCloak 4.4、Keycloak-proxy 2.3.0。

keycloak-代理配置:

client-id: zabbix-client
client-secret: <secret>

discovery-url: http://keycloak.my.domain:8080/auth/realms/myrealm
enable-default-deny: true
enable-logout-redirect: true
enable-logging: true
encryption_key: <secret>
listen: 127.0.0.1:10080
redirection-url: http://testbed-zabbix.my.domain
upstream-url: http://a.b.c.d:80/zabbix
secure-cookie: false
enable-authorization-header: true

resources:
- uri: /*
  roles:
    - zabbix

最佳答案

Zabbix 需要带有用户名的 PHP_AUTH_USER (或 REMOTE_USERAUTH_USER) header ,但 keycloak-proxy 不提供它。让我们使用电子邮件作为用户名(理论上您可以使用访问 token 中的任何声明)。将电子邮件添加到 keycloak-proxy 配置中的请求 header :

add-claims:
- email

并从 Zabbix Apache 配置中的电子邮件 header 创建 PHP_AUTH_USER 变量:

SetEnvIfNoCase X-Auth-Email "(.*)" PHP_AUTH_USER=$1

注意:Conf 语法可能不正确,因为它不在我的脑海中 - 它可能需要一些调整。

顺便说一句:有一个(黑客)用户补丁可用 - https://support.zabbix.com/browse/ZBXNEXT-4640 ,但 keycloak-gatekeeper 是更好的解决方案

郑重声明:keycloak-proxy = keycloak-gatekeeper(该项目最近已重命名并迁移到 keycloak org)

关于authentication - 使用 Keycloak-proxy 进行 Zabbix HTTP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52514278/

相关文章:

java - Spring 应用程序对 keycloak 的基本身份验证

unix - 寻找一种更有效(和可移植)的方式来在 unix 中获取(数字)文件权限

linux - 如何在 Zabbix 中检查来自多个国家/地区的服务器可用性

zabbix - 如何在元素不可用时触发警报?

node.js - NodeJS 和 Socket.io : Authentication across multiple modules

authentication - 2013 年 3 月 : Paypal Sandbox login loops back to developer page

angular - 如果我们使用带有 Angular 的第三方目录服务器(如 Azure),我们可以跳过 keycloak 登录页面吗?

java - Keycloak:从自定义端点 (SPI) 发送 AdminEvent

java - WSDL 客户端身份验证和多个证书

authentication - Laravel 5 db :seed the username and password, 但未在登录时进行身份验证