我已經搜索(探測,甚至)對此的答案,但迄今尚未提出任何有用的東西。我對ADFS,STS和WIF都很陌生,請原諒任何明顯的無知或不適當的術語使用。 ;)如何查看來自STS/IdP的重定向狀態
我目前通過ADFS將自定義MVC3應用程序與外部IdP集成在一起。 ADFS到IdP的設置完成並正常工作。
該網站的某些部分可由匿名用戶訪問 - 在web.config認證模式下已設置爲無。其他部分受自定義System.Web.Mvc.AuthorizeAttribute裝飾的控制器/操作方法保護。
對使用WsFederationAuthenticationModule的web.config進行的所有常規修改都已完成,並且它可以工作95%;用戶可以瀏覽網站的匿名訪問部分。當他們嘗試擊中受保護的部分時,authorize屬性會檢查他們是否在與HttpContext.Current.User關聯的IClaimsPrincipals中擁有來自我們IdP的一些自定義信息,如果沒有,則將ActionResult設置爲401; WsFederationAuthenticationModule啓動並將它們重定向到IdP的登錄頁面。當他們輸入他們的詳細信息時,他們會被一些FedAuth cookies成功重定向,然後授權通過。
問題出現在IdP登錄頁面時。這個特殊的IdP有一個鏈接,可以直接返回到我們的網站(原始請求到同一頁面),這個SAML響應嵌入某處(這是根據他們的文檔)
urn:oasis:names: tc:SAML:2.0:status:AuthnFailed
此時,他們現在是「未經授權」,所有用戶將看到(至少在開發中)是一個401頁面。您必須殺掉會話或以其他方式擺脫該cookie才能重新開始。
我需要做的是攔截來自IdP的重定向請求,並基本檢查該特定的SAML狀態,因爲用戶應該被重定向到未經授權的區域之一,就好像什麼都沒有發生過一樣。我已經在global.asax中嘗試過類似的東西:
protected void Application_Start()
{
// mvc stuff here....
// add handler to intercept handling creation of security tokens by WsFederationAuthnticationModule
FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
}
void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
{
FederatedAuthentication
.WSFederationAuthenticationModule
.SessionSecurityTokenCreated += WSFederationAuthenticationModule_SecuityTokenCreated;
}
public void WSFederationAuthenticationModule_SecuityTokenCreated (Object sender, SessionSecurityTokenCreatedEventArgs args)
{
var token = args.SessionToken;
// do something with the session token here e.g. check for SAML status
}
..但我無法看到任何有用的令牌;什麼都沒有表明具體的迴應狀態。事實上,有一個FedAuth cookie 在所有但事實上,從Idp的自定義信息是一個死的放棄,用戶一直在那裏,但以某種方式未能通過身份驗證,但原則上我希望能夠看到該狀態。我可能不得不在IdP處理超時......
也許我這樣做是全部錯誤,或只是普通的老不懂,但可以以某種方式填補我如何確定這些響應狀態?
Phew。謝謝! :D
糟糕,該代碼應該在global.asax – oolong 2012-03-13 01:57:07