2014-02-25 95 views
1

我的ASP.NET MVC 4應用程序受到SSO(OAM)的保護,並在IIS上運行ISAPI篩選器。收到我的應用程序的請求後,它將被ISAPI篩選器攔截並重定向到SSO。用戶必須在SSO上登錄,然後返回到我的應用程序。設置SSO身份驗證後的FormsAuthentication

已通過身份驗證的用戶(通過SSO)的用戶名與我的應用程序在HTTP請求標題中共享。

Request.Headers["username"] 

我所試圖實現的是 - SSO身份驗證後,我的username = Request.Headers["username"]應用程序中設置FormsAuthentication。通過這種方式,SSO對我的應用程序保持透明,用戶身份可在HttpContext對象中使用,另外,我(開發人員)可以有效地爲特定角色使用授權屬性。

爲了實現這一點 - 我連接到Session_Start(),閱讀Request.Headers["username"],設置FormsAuthentication Cookie。我爲我的應用程序獲得此SSO用戶的Forms-Authenticated。

但我的問題是,當我退出(FormsAuthentication.Signout),我把它重定向到另一頁的應用程序中,這將觸發新的會話(我可以看到在session_start觸發時發生這種情況)

我在做的正確的事情 - SSO之後的FormsAuthentication?如果沒有,爲什麼不,然後如何讓我的應用程序知道SSO身份驗證的用戶?

回答

0

如果請求的URL是註銷URL,我必須明確地終止Session_Start內部的會話。然後在下一個請求(如從註銷到登錄頁面再次),它會生成一個新的會話,並順利運行。

protected void Session_Start() 
    { 
     if (!Request.IsAuthenticated && !IsSignoutURL) 
      AcceptSessionRequest(); //process local authentication 

     else if (IsSignoutURL) 
      RejectSessionRequest(); //kill the sessions 
    } 

有關背景上SSO如何通過驗證用戶的身份對我的應用程序,請閱讀我給tvanfosson的帖子發表評論。

該帖子仍然打開,以獲得更好的主意。

1

使用FormsAuthentication cookie在使用Single-Sign-On提供程序進行身份驗證後,可以跟蹤應用程序中的登錄用戶是完全合理的。您不會顯示它,但我希望您也可以獲得一些憑證,您可以使用它來與SSO提供商帶外驗證簽入用戶,而不僅僅是相信username標頭。

但是,您可能會看到,用戶在簽出應用程序時未從SSO提供程序註銷。因此,只要他們擁有對SSO提供商有效的Cookie,他們就會保持登錄狀態,即用戶將自動從SSO提供商退回到您的應用程序,而無需進行任何所需的身份驗證。

這是不幸的,但正常。

如果您確實希望用戶註銷,則需要使用集中註銷功能。我沒有與OAM合作,但它似乎支持:http://docs.oracle.com/cd/E21764_01/doc.1111/e15478/logout.htm

+0

謝謝tvanfosson,它的真實。 SSO提供程序發出一個令牌(cookie),它已經保護了我的整個應用程序,除了一個資源是我的註銷URL。 OAM配置爲使我的註銷URL上的SSO Cookie無效,僅此處用戶失去其提供的SSO身份。目前很好。 這是問題開始的地方。由於此註銷URL是我的應用程序的一部分,只要用戶註銷(會話被終止,FormsAuth.Signout調用)並重定向到此URL。 SSO Cookie無效,但認爲它的新請求Session_Start再次被調用。 –