2012-07-27 61 views
0

我已經搜索了網絡上的答案,並且發現了類似的問題,例如this one,但我還沒有找到具體答案。ASP.NET窗體身份驗證Cookie在WCF REST API中導致400「錯誤請求」錯誤REST API方法

我有一個使用窗體身份驗證提供登錄支持的MVC網站(這基本上是MVC中的開箱即用登錄支持)。

在同一個域中,我使用單一方法獲得了WCF REST服務。

我想要做的是看看我是否可以利用服務中的表單身份驗證來查看請求者是否已通過MVC應用程序「登錄」。在發現其他一些帖子後,我確定web.config文件(w.r.t. Forms Authentication)是相同的(相同的機器密鑰等)。

問題出在這裏:我可以通過MVC站點登錄(因此,通過cookie獲取我的身份驗證票證)。當我向我的服務發出GET請求時(請記住,在與MVC相同的域上),我可以看到「.ASPXAUTH」cookie隨請求一起發送。

但是,我每次都收到「400錯誤請求」響應。此外,該響應的主體被指示
「服務器遇到一個錯誤處理請求...」

附加意見:

  • 如果我從請求刪除.ASPXAUTH餅乾(使用招或curl等),請求經過沒有問題
  • 我可以使用Fiddler或curl向MVC應用程序中的受保護頁面發送請求,幷包含相同的.ASPXAUTH cookie,並且該腳本按預期工作(200響應與預期的內容在響應身體)。
  • (奇怪的)我可以在Global.asax.cs中的Application_AcquireRequestState方法內的服務應用程序中設置一個斷點,並在發送請求時點擊它。
    • 然後我就可以檢查HttpContext.Current.User.Identity,看到IsAuthenticated是真實的,名稱是顯示(通過MVC應用程序從最初的登錄)我預計的用戶名
  • 我的服務方法中的第一個可執行代碼行中的一個斷點永遠不會被觸發。

當然,當我刪除.ASPXAUTH餅乾,在我服務並重破發點被擊中(和,自然,身份在這種情況下驗證。

因此,它似乎對我說:

  1. 窗體身份驗證的工作,我會希望它在我的服務中工作,我可以檢測該請求被驗證,並將其掌握的信息移動
  2. 我崩潰,並在某處燃燒。 ASP.NE T管道表單身份驗證不過之前我的服務方法被調用。

我一直沒有找到任何引用類似問題的地方,並會欣賞另一組眼睛(或數千眼)指出我希望是一個非常愚蠢和明顯的答案。

(如果有任何代碼的特定區域想看看,我可以添加的要求。我不想進一步負擔已經過於措辭後用噸隨機碼樣本)

回答

1

與其說是解決問題的答案,不如說是一種解決方法。但是,我認爲這是實現基本目標的更合適的方法。

我將功能移植到基於ServiceStack的解決方案。我的猜想是衝突發生在我曾經使用過的WCF REST Starter Kit代碼中的某處,但我沒有做詳盡的分析。

無論如何,利用這個新模型完成了MVC站點和我的服務之間利用表單身份驗證的基本目標。