SimpleSAMLphp 覆盖 PHP (Zend) 会话,旧的 SimpleSAMLphp 版本不会发生

SimpleSAMLphp overwrites PHP (Zend) session, doesn't happen with older SimpleSAMLphp version

我不得不在旧 PHP 服务器上更新 simplesamlphp,旧版本的库是 2010 年的。Simplesamlphp 用作服务提供商 (SP)在 SP 启动的环境中。

我将其替换为 09/'20 版本并进行了相同的配置。除了一件事,一切正常。

Simplesamlphp 使用 PHPSESSION 存储会话,通过功能它用他的替换 php 会话并且应该在 cleanup() 方法后再次设置旧会话在身份验证完成后调用(在会话实例上)。

这行不通,但我觉得很好,因为它对用户来说无关紧要。

现在我必须实现一个按钮来测试 protected 页面上的 SAML 集成。 通过受保护,我的意思是它需要经过身份验证(通过 Zend Auth)才能查看页面,否则它会自动将用户重定向(服务器端)到主页。

这是此按钮的操作代码(用于测试 SAML 集成),位于此受保护的控制器内:

require_once('simplesaml/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('cie');
$as->requireAuth(array(
    'saml:idp' => $idp,
));

// --- user is redirected to the IDP and proceeds authenticating)...

$attributes = $as->getAttributes();
$session = \SimpleSAML\Session::getSessionFromRequest();
if($session){
    $session->cleanup();
}

发生的事情是:

  1. requireAuth() 被调用,我当前的会话被收起并替换为 SimpleSAML 的会话。
  2. 用户被重定向到 IDP 并进行身份验证
  3. IDP 将用户重定向回我的页面
  4. Zend 在我的代码 运行(requireAuth() 之后的所有内容永远不会 运行)和 cleanup() 方法之前完成它的工作已调用,因此旧的 PHP 会话未恢复
  5. Zend 检查用户未通过身份验证(因为它仍在使用 SimpleSAML 的会话)并将用户重定向回主页。

这么说,2010 年的旧库不会发生这种情况,旧的 PHP 会话永远不会丢失,我不知道为什么。我检查了我的同事们当天在旧库中更改的所有内容,但没有任何内容可以解决这个问题。

有没有人有任何想法或提示我可以遵循? 有解决此问题的解决方法/想法吗?

几周来我一直拼命地用谷歌搜索一些东西,但很难找到具体的东西。

非常感谢您阅读这么长的问题。

我在很多小时后很容易地解决了这个问题,我会写下我所做的,以防它可能对其他人有所帮助。

我的问题是:

  • simplesamlphp 使用与我的应用程序相同的会话 cookie 名称我之前已经尝试过更改此设置,但由于下面的第二个原因它从未起作用)
  • 在我的代码中没有正确清理 simplesamlphp 会话

所以,首先,我添加了对清理方法的调用,因为它在真实页面上缺失,我问题上发布的代码是测试页面,这是缺少调用的真实页面清理。

    $as->requireAuth(array(
            'saml:idp' => $idp,
    ));

    $attributes = $as->getAttributes();
    $session = \SimpleSAML\Session::getSessionFromRequest();
    if($session){
        $session->cleanup();
    }

在不调用 cleanup() 的情况下,除了 NULL(=使用 PHP 的设置)之外,我在 属性 session.phpsession.cookiename 上设置的任何值都会导致会话完全中断。

所以在添加 cleanup() 之后,我现在可以为 属性 session.phpsession.cookiename (\config\config.php). 我指定了一个与 PHP 使用的名称不同的值(因为这是问题所在),即默认值 PHPSESSID.

'session.phpsession.cookiename' => 'hSAMLses'

现在一切都很顺利,希望这个答案能帮助别人,因为我真的很挣扎。