2012-11-22 112 views
24

我使用新的4.5 WIF東西來驗證網站的用戶並確保我的MVC網站和WCF服務之間的通信安全。WIF 4.5 BootstrapContext安全令牌null

我有網站配置爲保存引導上下文,以便我可以重新使用相同的安全令牌的所有請求到服務層。

在正常情況下,所有工作正常,每個網站請求已通過身份驗證,並通過上下文使SecurityToken可用,以確保WCF呼叫的安全。

但是,如果網站應用程序域被重置(例如在開發過程中構建應用程序),對網站的任何請求仍將通過身份驗證,但SecurityToken在上下文中不再可用於傳遞給WCF調用。

調試BootstrapContext它有4個有用的特性:

SecurityToken 
SecutiryTokenHandler 
Token 
TokenBytes 

預應用程序域復位SecurityToken和SecurityTokenHandler具有值和後復位令牌具有值。

在重置之後目光注視Token的值,它看起來像是原始的SAML XML,所以我大概可以從中補充完整的SecutiryToken,但這看起來很奇怪,我找不到任何有關文檔。

任何想法,我可以做什麼來確保SecurityToken始終可用來保存我亂搞令牌XML嗎?

更新

使用dotPeek來看看什麼是在框架的源代碼怎麼回事,我可以看到casues這種行爲的執行路徑,但我不能確定任何理由,它需要是這個樣子以及如何可以避免。

最後,我放棄了試圖解決它與現在使用下面的一段代碼,以確保我有一個令牌

if (context.SecurityToken != null) 
{ 
    token = context.SecurityToken; 
} 
else if (context.Token.IsNotEmpty()) 
{ 
    var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers; 
    token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token))); 
} 

我現在所關心的是我錯過了這背後的一些推理behaiour和我的解決方案將在某個時刻爆炸。

+0

OWIN不一樣的WIF? – Kiquenet

回答

4

我偶然發現了同樣的問題。 我看到令牌具有令牌的xml表示並且SecurityToken爲空。 我也注意到這很容易通過殺死w3wp.exe來重現。

+0

+1用於殺死w3wp.exe repro步驟 – Josh

0

我在執行微軟的ClaimsAwareWebFarm示例時遇到同樣的問題。問題出現當您添加本節進行到web.config中:

<caches> 
    <sessionSecurityTokenCache type="CacheLibrary.SharedSessionSecurityTokenCache, CacheLibrary"> 
     <!--cacheServiceAddress points to the centralized session security token cache service running in the web farm.--> 
     <cacheServiceAddress url="http://localhost/SecurityTokenCacheService/SessionSecurityTokenCacheService.svc" /> 
    </sessionSecurityTokenCache> 
    </caches> 

謝謝馬特這個解決方法!

1

我已經通過刪除包括Fedauth cookie的瀏覽器cookie解決了這個問題。一旦再次調試,我能夠得到所有需要的值