2012-03-01 137 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

相关问题