表单身份验证Cookie和WCF

时间:2012-07-27 02:01:19

标签: asp.net ajax wcf forms-authentication facade

我有一个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 = .....'。

我觉得我错过了一些简单的东西,但是我太接近问题了。

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您要完成的内容,但如果这些是两个独立的应用程序,您将需要共享机器密钥以解密/加密两者中的身份验证cookie。

在您的web.config中

,请确保您拥有以下设置:

<machineKey
  validationKey="[generated key]"
  validation="HMACSHA512"
  decryptionKey="[generated key]"
  decryption="AES"
  />

在此代码项目文章中了解如何生成这些密钥(以及有关它们的更多信息):

ASP.Net machineKey Generator - CodeProject

如果这有帮助,请告诉我......