2016-03-01 53 views
0

我使用saml一路通過ADFS將Auth0 SSO用於Spring安全應用程序時已設置好。因此,它看起來像這樣:ADFS中的單一註銷第二個請求失敗

Auth0 ----> ADFS ----> SpringSecurity App. 

我Auth0的控制,但它模擬的第三方將與我們的ADFS服務器集成。

這工作正常。

要做註銷,我最低限度希望銷燬SpringSecurity應用程序和ADFS應用程序上的會話。當我第一次呼叫註銷時,SAML註銷請求會傳遞給ADFS。然後,ADFS將註銷請求傳遞給Auth0,並在該處結束。這破壞了會話。但是,如果在沒有關閉瀏覽器的情況下再次登錄I SSO,然後註銷,則ADFS會拒絕該登出請求,並顯示urn:oasis:names:tc:SAML:2.0:status:Requester,這意味着它不喜歡我的請求。

我已經能夠縮小到事實,有一個SAMLLogout cookie,與我的ADFS服務器域的設置。當註銷反彈到Auth0時,這似乎會被設置,但不會被刪除。當該cookie存在時調用註銷會導致錯誤。當我刪除一個cookie時,我可以成功註銷(因爲它破壞了ADFS會話並向Auth0發送註銷請求)。該Cookie有效期爲Session,因此關閉和打開瀏覽器也可以。

我可以發佈令牌請求和響應,但我不認爲它與令牌本身有關。它們都被正確簽名,並且在執行註銷時ADFS不報告任何錯誤。

我不一定需要ADFS來調用Auth0(或任何IdP)來銷燬該會話,我只需要它來銷燬它自己的會話。

回答

0

而不是使用摧毀善意使用「未設置」,以避免與註銷代碼有關的進一步問題。我不知道爲什麼,但有時候「摧毀」導致註銷按鈕方面的問題。

+0

對不起,我沒有字面意思是一些調用「摧毀」或「未設置」,我的意思是更多的內置功能的Spring Security和ADFS – Ronnie76er

0

我們提出了以下解決方案: 我們注意到adfs/ls/idpinitiatedsignon.aspx頁面有「從您訪問的所有網站註銷」。選項,無論您登錄多少次並從不同的選項卡註銷,都會終止身份驗證Cookie。 我們創建了idpinitiatedsignon.aspx和idpinitiatedsignon.aspx.cs的重複副本並將它們重命名(例如logoutpage.aspx)。 我們添加了SingleLogout();在idpinitiatedsignon.aspx.cs的Page_Init的末尾,因此它讀取: 保護無效Page_Init(對象發件人,EventArgs e) { string rpIdentity = Context.Request.QueryString [RpIdentityQueryParameter];

// 
    // If the query string specified a certain relying party, sign in to that relying party. 
    // 
    if (!String.IsNullOrEmpty(rpIdentity)) 
    { 
     string decodedIdentity = Server.UrlDecode(rpIdentity); 

     if (decodedIdentity == IdpAsRpIdentifier) 
     { 
      decodedIdentity = String.Empty; 
     } 

     SignIn(rpIdentity, new SignOnRequestParameters()); 
    } 
    else 
    { 
     PopulateConditionalVisibilityControls(); 

     RelyingPartyDropDownList.DataSource = RelyingParties; 
     RelyingPartyDropDownList.DataBind(); 

     UpdateText(); 
    } 
SingleLogout(); 
} 

然後我們引用這個新頁面示例logoutpage.aspx作爲註銷URL。 我希望這會爲ADFS v2上面臨此SAML註銷問題的其他人節省一些研究時間。

相關問題