2012-03-01 138 views
1

我不熟悉此AJAX方法,但不應使用UpdatePanel,而是使用WebMethod s和WebService s。我的主要問題是身份驗證。Webmethod身份驗證未通過

當輸入頁面或創建回發請求時,一切正常。身份驗證正確傳遞,我可以訪問Thread.CurrentPrincipal.Identity並從那裏獲取我的用戶身份對象。

但是,當我嘗試在我的頁面上呼叫WebMethod時,此更改。調用正確地傳遞給服務器,並且一切似乎都很好,直到我嘗試從線程獲取用戶標識。然後,我只得到Anonymous用戶,而不是真正的用戶。在webmethod上啓用會話似乎沒有多大幫助。

任何想法可能會導致此問題,以及如何解決它?有人提到認證cookie需要與請求一起傳遞,但我該怎麼做呢?

任何幫助將不勝感激。

編輯:

一些澄清和代碼:

我的應用程序是用標準asp.net。在對遺留代碼進行了一些更深入的研究之後,我發現所有認證都是在一些基類中完成的,從所有其他頁面繼承。每次加載頁面時,用戶主體都從HttpContext.Current.Session("...")獲得。我認爲這不是一個好的解決方案,但我現在需要堅持下去。問題是,WebMethod由於是static,因此無法觸發整個頁面的生命週期。我現在通過調用從會話中獲取用戶數據的方法來修復它。

我想得到一些想法如何正確創建,以及基於會話的身份驗證可能導致哪些問題。

PageMethods.SomeMethod(parameter, SuccessDelegate, FailureDelegate); 

這就是我現在打電話給WebMethods的方式。我認爲它傳遞了所有必需的cookies,對嗎?

回答

0

正如上面的註釋中所述,問題在於處理用戶的遺留代碼。需要調用特殊的函數來將適當的用戶數據分配給處理線程。不是最好的解決方案,但這就是它有時與遺留代碼的關係。你要做什麼?

1

這取決於你如何調用方法和以什麼方式?

例如,使用其Post方法的Jquery應該將所有的cookie(包括您的FormsAuth/Session cookie)與請求進行對比,然後根據需要進行身份驗證。裸機技術可能會進行輕量級調用,而不會推動cookie ...監控此方法的一種方法是使用Fiddler來觀察請求以及基於瀏覽器的開發插件,如Firebug,並查看發生了什麼並修改了您的JS代碼作爲適當的。個人而言,如果您正在開始一個全新的項目,並且沒有迫切需要將您的服務暴露在您的Web應用程序之外,那麼我會建議您查看ASP.NET MVC,在那裏您可以使Jquery /客戶端達到控制器,並免費獲得您的身份驗證。我最近使用WCF JSON端點創建了一些simliar,並且還有一些不可避免的痛苦,然後我看到了MVC並且有人踢了我自己...

+0

我設法得到了一些關於這個問題的更多信息,所以我編輯了我的問題來包含這些細節。看來問題不在於Cookie,而在於舊代碼。 – Pako 2012-03-01 14:17:27

相關問題