"国家信息丢失"在SimpleSamlphp中

时间:2017-04-19 09:15:57

标签: php saml-2.0 simplesamlphp

我收到错误状态信息丢失"状态信息丢失"在SimpleSamlphp中。 使用sprint-security作为SP,并在Simplesamlphp上配置Idp。 然后,浏览器可以将SP网页重定向到Idp,但在登录用户名和密码后,我收到错误, "国家信息丢失"。 ```

Apr 19 08:52:28 simplesamlphp DEBUG [bc5df4b2c1] array (
  'id' => 'a3a41e7aia439d7371j5e742e35jhi',
  'url' => NULL,
)
Apr 19 08:52:28 simplesamlphp DEBUG [bc5df4b2c1] Ron====sid===end
Apr 19 08:52:28 simplesamlphp DEBUG [bc5df4b2c1] NULL
Apr 19 08:52:28 simplesamlphp DEBUG [bc5df4b2c1] Ron====url===end
Apr 19 08:52:28 simplesamlphp DEBUG [bc5df4b2c1] Ron====state:NULL
Apr 19 08:52:28 simplesamlphp ERROR [bc5df4b2c1] SimpleSAML_Error_NoState: NOSTATE
Apr 19 08:52:28 simplesamlphp ERROR [bc5df4b2c1] Backtrace:
Apr 19 08:52:28 simplesamlphp ERROR [bc5df4b2c1] 2 /var/simplesamlphp/lib/SimpleSAML/Auth/State.php:274 (SimpleSAML_Auth_State::loadState)
Apr 19 08:52:28 simplesamlphp ERROR [bc5df4b2c1] 1 /var/simplesamlphp/modules/saml/www/sp/saml2-acs.php:91 (require)
Apr 19 08:52:28 simplesamlphp ERROR [bc5df4b2c1] 0 /var/simplesamlphp/www/module.php:137 (N/A)
Apr 19 08:52:28 simplesamlphp ERROR [bc5df4b2c1] Error report with id f9c150bb generated.

``` 我发现状态ID是由SP发送的。然后在Idp方面,现在日志显示会话包含两个有效的cookie用于phpsession和authtoken。但是这两个ID都无法与" RequestId"或" InResponseTo"在回应中。 我刚刚被困在这里。怎么会发生?有人可以帮忙吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

在我的情况下,我发现php的逻辑遵循SP php脚本,更明显的是当我更改了" stateId"手动,我得到一个这样的错误:  SimpleSAML_Error_Exception:此SP [https://domainname/simplesaml/module.php/saml/sp/metadata.php/default-sp]不是断言的有效受众。候选人是:[com:vdenotaris:spring:sp]

这是非常奇怪的,并且出乎我的意料。然后我检查了文件 "元数据/ saml20-SP-remote.php" SimpleSAMLphp文档说它将SP元数据添加到Idp配置中以便让它知道。 最后,我发现我在这里填写了错误的SP元数据。 如果是这样的话会出错:

$metadata['com:vdenotaris:spring:sp'] = array(
        'AssertionConsumerService' => 'https://domainname/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
        'SingleLogoutService' => 'https://domainname/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
);

AssertionConsumerService和SingleLogoutService应该在SP中分配URL,因为它们是SP上的服务。 所以它应该是这样的:

$metadata['com:vdenotaris:spring:sp'] = array(
        'AssertionConsumerService' => 'https://SPonRonSever:8443/prj/saml/SSO',
        'SingleLogoutService' => 'https://SPonRonSever:8443/prj/saml/SingleLogout',
);

然后当您输入" https://SPonRonSever:8443/prj"在浏览器的地址栏中,它可以跳转到Idp提供的登录页面,经过身份验证后,您可以访问所需的网页。