2012-07-27 146 views
0

我有一個asp.net 4.0應用程序(客戶端),使ajax/json調用一個http facade,然後將調用傳遞給我們的wcf服務層。表單身份驗證Cookie和WCF

用戶必須使用表單身份驗證在客戶端進行身份驗證。然後這個想法就是認證cookie將被傳遞給http外觀並且可以被訪問。 [基於Dino Esposito的書 - Microsoft ASP.NET和AJAX:架構Web應用程序]的設計

問題是,在外觀上,HttpContext.Current.User.Identity.Name是一個空字符串,而IsAuthenticated是false。

我已經通過添加以下到我的system.ServiceModel節在我的web.config(HTTP門面級別)啓用兼容性:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

我已經裝飾了我的服務有以下:

[AspNetCompatibilityRequirements(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Required)] 

當我在ajax/facade應用程序中調試時,我可以看到cookie存在於HttpContext.Current.Request.Cookies中。看起來Anonymous正在使用,而不是我的身份驗證用戶。

這兩個應用程序都運行在同一個IIS服務器上。

通過serviceProxy.js調用啓用了AJAX的wcf服務。也許這種方法沒有傳遞必要的cookie?

WCF跟蹤當前顯示'..ASPXANONYMOUS = .....; ASP.NET_SessionId = ....; .ASPXAUTH = .....'在消息日誌中。

我感覺我錯過了一些簡單的東西,但我太接近問題了。

歡迎任何建議。

回答

1

我不確定我完全理解了您要完成的內容,但是如果這些是兩個單獨的應用程序,您將需要共享機器密鑰以解密/加密兩者中的auth cookie。

在你的web.config,請確保您有以下設置:

<machineKey 
    validationKey="[generated key]" 
    validation="HMACSHA512" 
    decryptionKey="[generated key]" 
    decryption="AES" 
    /> 

看到如何生成這個CodeProject上的文章對這些鍵(以及關於它們的詳細信息):

ASP.Net machineKey Generator - CodeProject

讓我知道這是否有幫助...

+0

謝謝利蘭。我欠你一杯啤酒什麼的。我假設每臺機器上都有一臺機器密鑰,並且每個應用程序都沒有什麼不同。他們是兩個分開的應用程序。蒂姆,沒問題, – 2012-07-27 06:19:05

+0

。很高興幫助。通常它們只是自動生成的 - 即使對於單個應用程序也可能會導致麻煩,因爲如果重新部署(即使在同一臺計算機上),Cookie也不匹配。當他們的「記住我」複選框不起作用時,最終可能會導致用戶生氣... – 2012-07-27 15:16:25