我想将keycloak AUTH配置为现代zabbix 5.2版
为了实现它,我使用了 apache mod_auth_openidc https://github.com/zmartzone/mod_auth_openidc
我的架构看起来像
- 用户转到 apache 位置,如果他没有授权,他会重定向到 keykloak
- 用户在 keyklock(内部 keycloak 用户)中进行身份验证并返回到 apache
- Apache 将他重定向到 zabbix (nginx) 前面
Keycloak 服务器:版本为 13.0.1
Apache:Apache/2.4.6 (CentOS)
nginx:版本 1.16.1 zabbix
:5.2.0
首先,我配置了简单的测试网页以确保“KC”正常工作
我的 apache 配置是
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
#this is required by mod_auth_openidc
OIDCProviderMetadataURL https://KEYCLOAK_SERVER_IP/auth/realms/zabbix/.well-known/openid-configuration
OIDCRedirectURI http://APACHE_SERVER_IP/protected_by_oidc_rp.php/callback
OIDCCryptoPassphrase 0123456789
OIDCClientID zabbix
OIDCClientSecret 9ac67ff0-5733-45ea-b910-2b8dcd1386d2
# See https://github.com/Reposoft/openidc-keycloak-test/issues/7
#OIDCProviderTokenEndpointAuth client_secret_basic
OIDCSSLValidateServer Off
OIDCRemoteUserClaim email
OIDCScope "openid email"
<Location "/protected_by_oidc_rp.php">
AuthType openid-connect
Require valid-user
</Location>
</VirtualHost>
一切都很好。在 KC 授权后,我得到了我的页面
其次,我在 zabbix 中启用了 HTTP 身份验证 - 这只是简单的基本身份验证
我重新配置了我的 apache 位置
<VirtualHost *:80>
......
......
......
<Location "/">
AuthType openid-connect
Require valid-user
ProxyPreserveHost On
ProxyPass http://ZABBIX_SERVER_IP/
ProxyPassReverse http://ZABBIX_SERVER_IP/
</Location>
</VirtualHost>
我要做的最后一件事是添加标题
<Location "/">
...
...
RequestHeader set Authorization "Basic <SOME_VARIABLE_FROM_KEYCLOAK_CONVERTED_TO_BASE64>"
</Location>
我的问题是:如何从 keycloak 变量中获取用户名,例如preferred_username
并将其转换为 base64?
preferred_username
包含有效的用户登录。
更新
我仍在尝试配置此架构。我真的需要 OPEND 而不是 SAML,因为 keycloak 从浏览器中隐藏了他的标头我在 NGINX 服务器上使用 tcpflow
tcpflow -p -c -i eth0 port 80
我看到了来自我的 keycloak 服务器的标头
Cookie: mod_auth_openidc_session=b06b8f2c-2cf8-4d12-aed9-b162df5ef9b4
OIDC_CLAIM_sub: f7987186-3f96-4a86-b726-09c941ca4092
OIDC_CLAIM_preferred_username: test
我在 nginx.conf 中打开了 underscores_in_headers,并
在 nginx 中配置了 zabbix 位置。我尝试了不同的方法和变量,但没有奏效
location ~ [^/]\.php(/|$) {
auth_request_set $user $upstream_http_oidc_claim_preferred_username;
proxy_set_header X-User $user;
proxy_set_header $user $upstream_http_oidc_claim_preferred_username;
}
你能帮我抓住这个标题吗