将 grafana 与 apache2 + mod_auth_mellon 联合起来,将 SSO 与 SAML 联合起来



尝试使用 Okta 作为 IdP 实现 SSO(单 SIgn On(,我遵循了以下步骤:

  1. 安装 apache2 + mod_auth_mellon
  2. 在同一主机上安装 grafana
  3. 启用所需的 apache2 模块,如标头、authzn_core 和 authz_user等等...
  4. 生成元数据并配置mod_auth_mellon
  5. 配置格拉法纳。

My Apache cfg:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location />
MellonEnable "info"
MellonSPPrivateKeyFile /etc/apache2/mellon/urn_grafana.key
MellonSPCertFile /etc/apache2/mellon/urn_grafana.cert
MellonSPMetadataFile /etc/apache2/mellon/urn_grafana.xml
MellonIdPMetadataFile /etc/apache2/mellon/idp-metadata.xml
MellonEndpointPath /grafana
</Location>
MellonPostDirectory "/var/cache/mod_auth_mellon_postdata"
ProxyPass /grafana http://127.0.0.1:3000
ProxyPassReverse /grafana http://127.0.0.1:3000
<Location /grafana>
MellonEnable "auth"
MellonPostReplay On
MellonSamlResponseDump On
MellonUser "NAME_ID"
ProxyPassInterpolateEnv On
RequestHeader set X-WEBAUTH-USER "%{MELLON_username}e"
</Location>
</VirtualHost>

我的格拉法纳 cfg:

...
...
[auth.proxy]
enabled = true
header_name = X-WEBAUTH-USER
header_property = email
auto_sign_up = true
...
...

我一直在关注官方文档(github,com/UNINETT/mod_auth_mellon/wiki/GenericSetup(,但看起来我做错了什么。

关键是:它部分有效,我的意思是:

当我尝试访问 http://X.X.X.X/grafana 时,我被重定向到 Okta 的页面进行身份验证,然后我再次被重定向到 grafana http://X.X.X.X:3000/login 但我收到这个:

[{"fieldNames":["User"],"classification":"RequiredError","message":"Required"},{"fieldNames":["Password"],"classification":"RequiredError","message":"Required"}]

一些提示?看起来 Grafana 没有收到任何参数作为用户名或密码。 尝试调试我从 Okta 收到的参数,我没有弄清楚如何使用 PHP 代码打印标头。 我尝试使用火狐 SAMl 跟踪器来调试这个,但没有成功...... 看起来我没有收到来自 Okta 的任何其他标头,所以我有点卡在这里......

提前谢谢你。

更新:我尝试再次配置从 0 开始的所有内容,现在使用此配置它可以工作,但用户名为 (null(,因此行为与以前相同,但现在登录到 grafana。实际上,即使没有向Okta进行身份验证,它也可以登录!:o

Apache cfg:

LoadModule auth_mellon_module modules/mod_auth_mellon.so
RequestHeader set X-WEBAUTH-USER "%{MELLON_username}e"
ServerName grafana.xxxxxxxxxxxxxx.aws
ProxyPassInterpolateEnv On
ProxyPass /login/saml !
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ProxyRequests Off
<Location /login>
MellonEnable "auth"
#MellonSecureCookie Off
MellonMergeEnvVars On
MellonCookieDomain grafana.xxxxxxxxxxxxxx.aws
MellonCookiePath /
MellonEndpointPath "/login/saml"
MellonDefaultLoginPath "/"
MellonNoCookieErrorPage "http://grafana.xxxxxxxxxxxxxx.aws/no_cookie.html"
MellonSPentityId "http://grafana.xxxxxxxxxxxxxx.aws"
MellonSPPrivateKeyFile /etc/httpd/mellon/http_grafana.xxxxxxxxxxxxxx.aws_3000.key
MellonSPCertFile /etc/httpd/mellon/http_grafana.xxxxxxxxxxxxxx.aws_3000.cert
MellonIdPMetadataFile /etc/httpd/mellon/idp-metadata.xml
MellonAuthnContextClassRef "urn:federation:authentication:windows"
MellonAuthnContextClassRef "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
</Location>

Grafana cfg:

...
...
[auth.proxy]
enabled = true
header_name = X-WEBAUTH-USER
header_property = username
header_email_name = X-WEBAUTH-EMAIL
header_email_property = email
header_full_name = X-WEBAUTH-NAME
header_full_property = fullname
auto_sign_up = true
...
...

可能与此问题有关:github,com/grafana/grafana/issues/7049 但我很惊讶没有人发布有关如何使用 mod_auth_mellon 配置 grafana 以便使用 SAML 进行 SSO。

尝试使用对我有用的env=MELLON_username

RequestHeader set X-WEBAUTH-USER %{MELLON_user}e env=MELLON_user
RequestHeader set X-WEBAUTH-USER %{MELLON_email}e env=MELLON_email
RequestHeader set X-WEBAUTH-USER %{MELLON_username}e env=MELLON_username

相关内容

  • 没有找到相关文章

最新更新