2017-04-19 58 views
0

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

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. 

``` 我发现STATEID从其通过SP发送。然后在Idp方面,现在日志显示这些会话包含两个有效的用于伪造的cookie和一个authtoken。但是这两个ID都不能与响应中的“RequestId”或“InResponseTo”匹配。 我只是卡在这里。它是如何发生的?任何人都可以帮忙提前致谢。

回答

0

我发现php的逻辑跟在我的情况下的SP php脚本,更明显的是,当我手动更改“stateId”时,出现如下错误: SimpleSAML_Error_Exception:This SP [ https://domainname/simplesaml/module.php/saml/sp/metadata.php/default-sp]不是该断言的有效听众。候选人是:[com:vdenotaris:spring:sp]

这是非常奇怪的,超出我的期望。然后我检查了文件 “metadata/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分配网址,因为他们是在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提供的登录页面,验证后,你可以访问网页你自找的。