2010-11-16 43 views
3

我們在一個IIS WebSite/AppPool上運行了很多域。 現在我們正在使用Windows Identity Foundation實施SSO。在一個IIS站點上的WIF跨域,動態設置領域

web.config中的境界與設置

<wsFederation passiveRedirectEnabled="true" issuer="http://issuer.com" realm="http://realm.com" requireHttps="false" /> 

我的問題是境界取決於該域的用戶訪問上 的網站,所以我所做的是,我將其設置成像這樣的全球行動過濾器

var module = context.HttpContext.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as WSFederationAuthenticationModule; 
module.Realm = "http://" + siteInfo.DomainName; 

我的問題是。當我像這樣設置領域時,是根據用戶實例 還是應用程序實例設置的。

情景。

用戶A加載頁面,領域設置爲domain.a.com。

用戶B已登錄到domain.b.com並按登錄。

由於用戶A在用戶B按下登錄之前加載了該頁面,用戶A將以錯誤的領域集合擊中STS 。

這裏會發生什麼?

如果這不是設置每個用戶實例的領域的方法,是否有另一種方法來做到這一點?

回答

3

我已經解決了這個問題。

我設置PassiveRedirectEnabled爲false在web.config中

我成立了MVC項目使用窗體身份驗證沉綿我不。 我這樣做,以便每次運行帶有[Authorize]的控制器時,我都會使用返回URL將其重定向到我的登錄控制器。

在我登錄控制器我做

var module = HttpContext.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as WSFederationAuthenticationModule; 
module.PassiveRedirectEnabled = true; 

SignInRequestMessage mess = module.CreateSignInRequest("passive", returnUrl, false); 
mess.Realm = "http://" + Request.Url.Host.ToLower(); 

HttpContext.Response.Redirect(mess.WriteQueryString()); 

這絕對不是真的應該的,對我來說,感覺就像Windows標識基礎較爲落後,無論是在文檔和微軟技術明智的,沒有例子的MVC。

對於其他MVC人,我建議他們不要使用fedutil嚮導,而是編寫代碼並配置自己