我有一个作为服务提供者工作的 SimpleSamlPHP 实现,所以工作流程如下:
IdP 将断言发送到我的 ACS URL:
/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp
但是看起来他进行了身份验证并被重定向到
/simplesaml/module.php/saml/sp/saml2-acs.php
这会引发错误,因为没有指定 authsource(/default-sp 部分):
SimpleSAML_Error_Error: UNHANDLEDEXCEPTION
Backtrace:
0 *\simplesamlphp\www\module.php:180 (N/A)
Caused by: SimpleSAML_Error_Exception: No authentication source with id false found.
Backtrace:
2 *\simplesamlphp\lib\SimpleSAML\Auth\Source.php:242 (SimpleSAML_Auth_Source::getById)
1 *\simplesamlphp\modules\saml\www\sp\saml2-acs.php:8 (require)
0 *\simplesamlphp\www\module.php:135 (N/A)
但是,它也有一组 PHP 错误输出到页面:
Warning: array_key_exists(): The first argument should be either a string or an integer in *\simplesamlphp\lib\SimpleSAML\Configuration.php on line 314
Warning: Cannot modify header information - headers already sent by (output started at *\simplesamlphp\lib\SimpleSAML\Configuration.php:314) in *\simplesamlphp\lib\SimpleSAML\Error\Error.php on line 191
Warning: Cannot modify header information - headers already sent by (output started at *\simplesamlphp\lib\SimpleSAML\Configuration.php:314) in *\simplesamlphp\templates\includes\header.php on line 40
(我已取出目录路径并替换为 * - 这不是正常的)
我无法确定这是 SimpleSamlPHP 的错误,还是(更有可能)设置不正确。我的 authsources 和元数据如下:
saml20-idp-remote.php:
$metadata['https://app.onelogin.com/saml/metadata/391645'] = array(
'name' => 'FSSO',
'SingleSignOnService' => 'https://app.onelogin.com/trust/saml2/http-post/sso/391645',
'AssertionConsumerservice' => 'https://www.fbjni.com/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
'SingleLogoutService' => 'https://www.fbjni.com/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
'certData' => '[rawCertificateData]'
);
authsources.php:
'default-sp' => array(
'saml:SP',
'RelayState' => 'https://www.fbjni.com/',
'entityID' => 'https://app.onelogin.com/saml/metadata/391645',
),