我有一个 asp.net 4.0 应用程序(客户端),它对 http 外观进行 ajax/json 调用,然后将调用传递给我们的 wcf 服务层。
用户必须使用表单身份验证在客户端上进行身份验证。然后的想法是身份验证cookie将被传递给http门面并可以在http门面访问。[基于 Dino Esposito 的书设计 - Microsoft ASP.NET 和 AJAX:架构 Web 应用程序]
问题是,在外观上,HttpContext.Current.User.Identity.Name 是一个空字符串,而 IsAuthenticated 是假的。
我通过将以下内容添加到我的 web.config(http 外观级别)中的 system.ServiceModel 部分来启用兼容性:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
我用以下内容装饰了我的服务:
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
当我在 ajax/facade 应用程序中调试时,我可以看到 HttpContext.Current.Request.Cookies 中存在 cookie。似乎正在使用匿名而不是我的经过身份验证的用户。
两个应用程序都在同一个 IIS 服务器上运行。
对启用 AJAX 的 wcf 服务的调用是通过 serviceProxy.js 进行的。也许这个方法没有传递必要的cookie?
WCF 跟踪当前显示 '..ASPXANONYMOUS=.....; ASP.NET_SessionId=....; .ASPXAUTH=.....' 在消息日志中。
我觉得我错过了一些简单的东西,但离问题太近了。
欢迎任何建议。