我有一个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 = .....'在消息日志中。
我感觉我错过了一些简单的东西,但我太接近问题了。
欢迎任何建议。
谢谢利兰。我欠你一杯啤酒什么的。我假设每台机器上都有一台机器密钥,并且每个应用程序都没有什么不同。他们是两个分开的应用程序。蒂姆,没问题, – 2012-07-27 06:19:05
。很高兴帮助。通常它们只是自动生成的 - 即使对于单个应用程序也可能会导致麻烦,因为如果重新部署(即使在同一台计算机上),Cookie也不匹配。当他们的“记住我”复选框不起作用时,最终可能会导致用户生气... – 2012-07-27 15:16:25