我們正在嘗試使用PingFederate將ASP.NET MVC網站與我們客戶的SSO系統集成。我想使用內置的FormsAuthentication框架來做到這一點。我已經走了一下到目前爲止的方法是:.NET FormAuthentication標籤什麼時候被檢查,我如何利用這個事件?
設置我的Web.config讓我FormsAuthentication LoginURL變爲「安全」控制器上我的網站「BeginAuthentication」行動。通過這個動作,我設置了一些會話變量(例如,因爲Ping不會將這些信息發回給我),所以我設置了一些會話變量(例如訪問了哪個URL),然後重定向到我們客戶的外部站點上的登錄頁面(www.client.com)。例如com/Login)。
從這裏開始進行身份驗證,並在與我們的應用程序運行的相同的域上生成一個cookie,其中包含經過身份驗證的用戶的唯一標識符,我將其設置爲一旦這個發生時,Ping服務器將重定向到我的「安全」控制器上的「EndAuthentication」操作。
在此操作中,我調用我的成員資格類的「ValidateUser」方法,該方法從cookie中獲取此唯一標識符,並在我們的應用程序中加載此ID所引用的用戶。我將會話(例如會話[「LoggedInAs」))中登錄的用戶保存起來,並使包含SSO系統爲我提供的已認證用戶的ID的cookie過期。
所有這一切都很好。我想知道的問題是,在我們的用戶已經通過身份驗證並手動返回到客戶端的登錄頁面(www.client.com/login)並以另一個用戶身份登錄後會發生什麼。如果他們這樣做,那麼從#2到#3的流程正常發生 - 但由於在我們的網站上已經存在一個經過驗證的用戶,所以似乎FormsAuthentication系統不會打擾任何事情,所以我不會有機會檢查我正在尋找作爲這個新用戶登錄的cookie。我想要做的是,在我的Global.asax文件(可能是FormsAuthenticate_OnAuthenticate)中的某處,檢查是否存在SSO系統發送給我的cookie,如果存在,請使用FormsAuthentication.SignOut註銷應用程序( )。
另一個似乎相關的問題是,如果我讓我的會話過期,FormsAuthentication仍然認爲我已通過身份驗證,即使沒有當前登錄的用戶存在於我的會話中,它也允許我訪問頁面,因此頁面無法正確呈現。我是否應該在這裏使用Session_End事件並執行FormsAuthentication.SignOut()?
基本上,我想知道什麼時候通過 System.Web.Security.FormsAuthentication.SetAuthCookie(..)創建的身份驗證票證在請求流中被檢查,以便我可以確定是否需要SignOut()並強制重新確認或不。
感謝您的任何幫助。對不起,這封郵件的長度儘可能詳細。
穆斯塔法