1

我正在使用WSFederationAuthenticationModule進行身份驗證。當用戶未通過身份驗證時,會將其重定向到ADFS Web代理。 ADFS cookie的持續時間比應用程序會話持續時間更長,所以有時它們會直接循環到應用程序中。如何在使用WSFederationAuthenticationModule時會話過期後正確處理註銷請求?

幾乎每次這是我想要的,用戶都會嘗試做一些事情,如果會話過期並重新導向它們,它們會回來(無論是在重新登錄後還是在發現Cookie仍然很好之後)然後他們可以做他們想做的事情。但是,如果他們點擊「註銷」,我希望他們註銷。但是,模塊正在攔截並將它們發送回去,然後在會話恢復後必須再次單擊「註銷」。

註銷是MVC api控制器操作。我不確定我是否想從安全背後拿出它,因爲它也觸發了應用程序的一些清理工作(我意識到這也是一個問題,因爲如果他們從未單擊註銷,那麼這些事情將不會發生,是一個不同的問題)。

我覺得我必須用WSFederationAuthenticationModule和ADFS丟失一些東西......對於使註銷操作成爲匿名/公共操作,感覺不對。在WSFederationAuthenticationModule的意圖中必須有一些考慮,但我似乎無法把它壓低。

+0

你的web.config與模塊有什麼關係? –

回答

0

據我瞭解您的身份驗證通過Auth cookie進行保存。您應該嘗試在您的應用控制器中添加以下注銷操作:

 FederatedAuthentication.SessionAuthenticationModule.SignOut(); 
    return View("LogOut"); 

這會將它們註銷。現在,如果未經身份驗證的人員無法訪問「LogOut」視圖,它將重定向回登錄頁面進行登錄。 還有一件事,如果你的意思是在會話過期後有人試圖訪問註銷頁面(儘管他們的會話已經過期了),他們首先被重定向到登錄模塊進行認證(因爲他們需要被認證訪問登出頁面),呵呵,你可以做這樣的事情:

 if (User.Identity.IsAuthenticated) 
     ...u'r logout logic goes here together with other clean-up... 
    else 
     ...u could choose to return a view which says he is already logged out 

或登錄服務端(如果你控制它),檢查其中的請求來自何處,並採取相應的行動。

+0

啊,我現在看到了一些東西,如果這個人沒有得到認可,他們會被帶到登錄頁面,但它是ADFS並且有一個cookie可能仍然很好(並且與我們的應用程序無關),在這種情況下,重定向會發生在閃光,他們將被送回。 – BigOmega

+0

如果該人的Cookie仍然良好,他/她不會被帶回登錄頁面(因爲良好的authcookie可以訪問您的註銷操作) - 執行註銷操作。如果Cookie已過期,並且您的註銷操作需要經過身份驗證的用戶,那麼它將用於重定向到ADFS。這完全取決於你如何控制對註銷操作的訪問。您可以將您的註銷操作公開,並在其中進行檢查,如上所示,以獲得更多控制權。 – inniko