2013-03-13 49 views
5

我在我的MVC 4應用程序中使用ACS 2.0。使用Azure ACS時無法從Active Directory註銷

它已經配置爲登錄,它適用於包括ADFS在內的各種提供者。 我需要實現註銷功能。

由於this question已經過時,我使用的代碼從these samples

這裏是如何看起來像:

// Load Identity Configuration 
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration; 

    // Get wtrealm from WsFederationConfiguation Section 
    string wtrealm = config.WsFederationConfiguration.Realm; 
    string wreply = wtrealm; //return url 

    // Read the ACS Ws-Federation endpoint from web.Config 
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"]; 

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint)); 

    signoutRequestMessage.Parameters.Add("wreply", wreply); 
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm); 

    FederatedAuthentication.SessionAuthenticationModule.SignOut(); 

    var signoutUrl = signoutRequestMessage.WriteQueryString(); 

其結果是,我得到的註銷URL,我應該重定向,它會處置令牌並將我送回。網址如下所示:

https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f 

因此,Google,Yahoo和Microsoft帳戶的預期效果。 當我退出並嘗試訪問受保護區域時,我收到了一個身份提供者列表,我必須再次登錄,即使我選擇了相同的提供者。

但是當我使用ADFS提供商,它的工作原理類似:

  • 我點擊登出,並獲得可用的提供的頁面

  • 我選擇ADFS提供商再次

  • 我用我的舊AD憑據進入保護區

  • 如果我將ADFS作爲唯一的提供者,則第2步f從上面的ROM被跳過,並且 我不斷地登錄,無法更改用戶。

當我看到會發生什麼時,ACS不會處置它從ADFS獲得的安全令牌並重新使用它。

你有任何線索可以強制ACS處置這個令牌嗎?

在此先感謝!

+1

在這種情況下,ACS永遠不會在cookie中保存令牌。唯一的Cookie位於ADFS和您的RP。如果您位於已加入域的計算機上,我懷疑ADFS可能已配置爲自動登錄。您是否可以確認您最初是否必須使用用戶名/密碼登錄,以及在使用私人瀏覽器窗口時是否自動登錄? – 2013-03-15 18:53:13

+0

Oren,我確認我必須首次登錄 - 我的機器不在該域中。私人瀏覽器窗口上的行爲相同。而且我懷疑ADFS和RP之間的令牌沒有處理。如果您願意幫助,請告訴我您的twitter/fb/e-mail。我會給你發送URL和AD帳戶來看看,我也可以分享源代碼。 – 2013-03-18 08:22:41

+0

更新:在Facebook上找到您並共享憑據和URL。讓我知道你是否需要這些資源。 – 2013-03-18 08:31:04

回答

0

+1 @noren-melzer的回答:瀏覽器緩存http基本憑證並自動重新發送它們。無論是移動到表單身份驗證(使用cookie)還是註銷,特別是拒絕瀏覽器的auth頭部,不斷返回401.有時,「返回401有效憑證」用於清除瀏覽器,有時您只需要用戶關閉瀏覽器。

相關問題