在我的 Web 应用程序中实施 simplesamlphp 库的问题

Issue with the implementation of the simplesamlphp library into my web application

我尝试将 simplesamlphp 库实施到我的 Web 应用程序中。但是当我调用 requireAuth() 函数时,我收到一条 PHP 致命错误消息。未捕获的异常:加载程序:文件名中的非法字符..... 好像他无法解决 Class SimpleSAML\Module\saml\Auth\Source\SP 但我不知道为什么。 有谁知道如何解决这个问题? 我已经删除了整个 simplesamlphp 安装并重新安装了它。

我使用以下代码:

require 'var/www/simplesamlphp/lib/_autoload.php';
$lAuthSrc = new \SimpleSAML\Auth\Simple('default-sp');
if (!$lAuthSrc->isAuthenticated()) {
  $lAuthSrc->requireAuth();
}
$lAttributes = $lAuthSrc -> getAttributes();
foreach($lAttributes as $lAttribute) {
  print_r($lAttribute);
}

一些附加信息: 配置的身份验证源测试工作正常。如果我通过配置的身份验证源登录,一切正常,我不会收到任何错误消息(在这种情况下不会调用 requireAuth() 函数)。 我用的是最新版simplesamlphp v.1.18.3

如果您需要更多信息,请告诉我。

老实说,看起来你的路径在要求上搞砸了......你确定你应该使用:

require 'var/www/simplesamlphp/lib/_autoload.php';

而不是

require '/var/www/simplesamlphp/lib/_autoload.php';

你真的有一个相对于脚本位置的 'var/www' 子目录吗?这在我看来是错误的。如果您在 var 之前包含第一个 /,它会使该路径绝对指向 SSP 的典型安装位置。

谢谢大家的帮助。我今天早上发现了这个问题。问题是我用于我自己的应用程序的自动加载器。我在另一个文件中注册了应用程序自动加载器,该文件在您上面看到的代码之前执行。 simplesamlphp 使用一些条件,例如:

if (!class_exists($className))

因为我在函数 class_exists 检查我的应用程序中是否存在 class 之前注册了我的应用程序自动加载器。在我的应用程序中,我不使用名称空间,这就是问题所在。

为了解决这个问题,我在使用 simplesamlphp 代码之前注销了我的应用程序自动加载器,并在 simplesamlphp 代码之后再次注册了自动加载器。

我希望这能让你们中的一些人头疼。