我有一个asp.net 4.0应用程序(客户端),它使ajax / json调用一个http外观,然后将调用传递给我们的wcf服务层。
用户必须使用表单身份验证在客户端上进行身份验证。然后,我们的想法是将身份验证cookie传递给http外观并可在http外观访问。 [基于Dino Esposito的书 - Microsoft ASP.NET和AJAX:构建Web应用程序]的设计
问题是,在立面上,HttpContext.Current.User.Identity.Name是一个空字符串,IsAuthenticated是false。
我已通过在web.config(http facade level)中的system.ServiceModel部分添加以下内容来启用兼容性:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
我用以下内容装饰了我的服务:
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
当我在ajax / facade应用程序中调试时,我可以看到HttpContext.Current.Request.Cookies中存在cookie。似乎正在使用Anonymous而不是我的身份验证用户。
两个应用程序都在同一个IIS服务器上运行。
通过serviceProxy.js调用启用AJAX的wcf服务。也许这种方法没有传递必要的cookie?
WCF追踪目前正在显示'..ASPXANONYMOUS = .....; ASP.NET_SessionId = ....;消息日志中的.ASPXAUTH = .....'。
我觉得我错过了一些简单的东西,但是我太接近问题了。
欢迎任何建议。
答案 0 :(得分:1)
我不确定我是否完全理解您要完成的内容,但如果这些是两个独立的应用程序,您将需要共享机器密钥以解密/加密两者中的身份验证cookie。
在您的web.config中,请确保您拥有以下设置:
<machineKey
validationKey="[generated key]"
validation="HMACSHA512"
decryptionKey="[generated key]"
decryption="AES"
/>
在此代码项目文章中了解如何生成这些密钥(以及有关它们的更多信息):
ASP.Net machineKey Generator - CodeProject
如果这有帮助,请告诉我......