2012-07-18 57 views
2

在.NET MVC(3)上構建SAML2服務提供者Web應用程序。我們使用ComponentSpace的SAML2庫進行身份驗證,而不是 Shibboleth SP。這裏是相關的控制器邏輯:如何在Shibboleth的SAML SSO之後修復瀏覽器後退按鈕問題

public class SignOnController : Controller 
{ 
    // constructor-inject _services 

    [HttpPost] 
    public ActionResult SendAuthnRequest(string userName, string returnUrl) 
    { 
     // this users ComponentSpace internally to push user to IdP 
     _services.SamlServiceProvider.SendAuthnRequest(args); 
     return new EmptyResult(); 
    } 

    [HttpPost] 
    public ActionResult ReceiveAuthnResponse() 
    { 
     var samlResponse = _services.SamleServiceProvider 
      .ReceiveSamlResponse(args); 
     // ... 
     return Redirect(samlResponse.RelayResourceUrl ?? defaultUrl); 
    } 
} 

最終用戶登陸中繼url或默認登錄頁面。然而,當他們點擊一個鏈接時,然後點擊後退按鈕,瀏覽器返回到Shibboleth IdP服務器上的錯誤頁面。之後,瀏覽器的前進和後退按鈕最終變得毫無用處。

我在做上述任何一種方法的錯誤嗎?我應該在發送時返回View()而不是EmptyResult()嗎?有什麼方法可以重置瀏覽器歷史記錄以防止重複回發到IdP?這是我可以在ComponentSpace的實現中配置的東西嗎?

+1

偉大的問題。你找到解決方案嗎?我正在處理同樣的問題。 – BryceH 2015-01-15 19:29:21

+0

@BryceH不幸的是,沒有。你或許可以在這個問題上提供賞金,但看看其他人是否知道任何事情。 – danludwig 2015-01-15 19:32:01

回答

0

所以我明白,您在IdP i WBSSO SAML2配置文件認證過程中回撥按鈕?我不知道你枚舉的組件,但在Shibboleth的情況下,它總是以錯誤頁面結尾。我可能是錯的,但如果你考慮SP-> IdP溝通的本質,我相信沒有其他選擇,除非你重新實現一些東西。

+0

不,後面的按鈕在IdP認證後被擊中。在發生後退按鈕問題之前,用戶已經在我們的SP應用程序中。 – danludwig 2012-07-20 15:32:22

0

通過瀏覽器發送的SAML協議中使用的SAML協議消息。正如您所看到的,使用SAML SSO時,單擊瀏覽器向前和向後導航按鈕可能會出現問題。

這個問題沒有簡單的解決方案。你可以看看合併Javascript來禁用導航按鈕,但最有可能會導致其他問題。

我認爲最好和最簡單的解決方案是顯示一個通用的錯誤消息,如果發生這種情況。這是您在應用程序中需要執行的操作。

我們的MvcExampleIdentityProvider和MvcExampleServiceProvider應用程序在大多數情況下都沒有問題。他們使用SAML高級API而不是問題中使用的SAML低級API,但這不應該有所作爲。在我們的例子中,我們也返回一個EmptyResult。

0

我們面臨着同樣的問題,並圍繞它的工作使用JavaScript API的歷史:

https://www.thecssninja.com/javascript/stealing-history-api

這不是很好,雖然因爲基本的瀏覽歷史記錄進行操作。但它有效地工作,並防止出現錯誤頁面。網絡應用程序中的後退/前進按鈕可以繼續正常工作,但用戶無法返回任何以前的網頁,而這不是您的網絡應用程序。這是我們可以忍受的妥協。