0

我有一个 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=.....' 在消息日志中。

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

欢迎任何建议。

4

1 回答 1

1

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

在您的 web.config 中,确保您具有以下设置:

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

在此 codeproject 文章中查看如何生成这些密钥(以及有关它们的更多信息):

ASP.Net machineKey 生成器 - CodeProject

让我知道这是否有帮助...

于 2012-07-27T03:45:36.510 回答