使用 mod_auth_mellon 登录后如何获取用户名?

问题描述 投票:0回答:2

我正在尝试为 php Web 应用程序设置 SSO。我已经使用 apache 配置了 mod_auth_mellon 以重定向到我的 Idp 身份验证页面,并且正在获取一个 cookie 来响应登录。

我的 httpd.conf 包含以下内容:

MellonCacheSize 100
MellonLockFile "/var/run/mod_auth_mellon.lock"
MellonPostTTL 900
MellonPostSize 1048576
MellonPostCount 100

<Location /secret>
   Require valid-user
   AuthType "Mellon"
   MellonEnable "auth"
   MellonVariable "cookie"
   MellonSecureCookie On
   MellonCookiePath /
   MellonUser "NAME_ID"
   MellonMergeEnvVars On
   MellonMergeEnvVars On ":"
   MellonEnvVarsIndexStart 1

   MellonSessionDump Off
   MellonSamlResponseDump Off

   MellonEndpointPath "/secret/endpoint"
   MellonDefaultLoginPath "/"

   MellonSessionLength 86400
   MellonNoCookieErrorPage "https://example.com/no_cookie.html"
   MellonSPMetadataFile /etc/apache2/mellon/sp-metadata.xml
   MellonSPPrivateKeyFile /etc/apache2/ssl.key
   MellonSPCertFile /etc/apache2/ssl.crt
   MellonIdPMetadataFile /etc/apache2/mellon/idp-metadata.xml

   MellonSamlResponseDump Off
   MellonSessionDump Off
   MellonAuthnContextClassRef "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
   MellonECPSendIDPList Off
   MellonRedirectDomains [self]
</Location>

当我有index.php时我得到结果:

<?php
print_r( $_COOKIE["mellon-cookie"] );
?>

看起来像:

6ce7d6484360f5a98683e0ae87738635

如何使用它来获取用户名以发送到我的应用程序?

编辑: 我尝试查看以下输出:

print_r( $_REQUEST );
print_r( $_SESSION );
print_r( $_POST );
print_r( $_GET );
php apache authentication
2个回答
1
投票

数据存储在php中的

$_SERVER
变量中。

以下 php 打印所有键和值。

<?php
header('Content-Type: text/plain');

foreach($_SERVER as $key=>$value) {
  if(substr($key, 0, 7) == 'MELLON_') {
    echo($key . '=' . $value . "\r\n");
  }
}
?>

0
投票

我知道这是一篇旧帖子,但添加了这个,因为我刚刚花了几天时间试图弄清楚为什么用户名会以随机字符串的形式返回。问题在于 SP 元数据文件。看来默认的NameID格式是“暂时的”。来自文档:

指定瞬态时,IdP 将返回不透明的临时 ID。不透明意味着您无法(轻松)将 ID 映射到用户。在许多情况下,它被实现为随机数或随机字符串。临时意味着 ID 仅在包含它的断言响应上下文中有效。

要解决此问题,您需要更新 SP 元数据文件并设置 NameID 格式:

<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>

这将放置在 SPSSODescriptor 元素内。例如

    ...
    </KeyDescriptor>
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://sso-example.com/myapp/sso/logout"/>
    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sso-example.com/myapp/sso/postResponse" index="0"/>
  </SPSSODescriptor>
</EntityDescriptor>

执行此操作后,$_SERVER['MELLON_NAME_ID'] 应包含实际用户名。

© www.soinside.com 2019 - 2024. All rights reserved.