2017-04-19 164 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提供的登錄頁面,驗證後,你可以訪問網頁你自找的。