【问题标题】:Forms Authentication Cookie and WCF表单身份验证 Cookie 和 WCF
【发布时间】:2012-07-25 16:49:13
【问题描述】:

我有一个 asp.net 4.0 应用程序(客户端),它对 http 外观进行 ajax/json 调用,然后将调用传递给我们的 wcf 服务层。

用户必须使用表单身份验证在客户端上进行身份验证。然后的想法是身份验证cookie将被传递给http门面并可以在http门面访问。 【根据 Dino Esposito 的书设计 - Microsoft ASP.NET and AJAX: Architecting Web Applications】

问题是,在外观上,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 服务器上运行。

通过 serviceProxy.js 调用启用 AJAX 的 wcf 服务。也许这个方法没有传递必要的cookie?

WCF 跟踪当前显示 '..ASPXANONYMOUS=.....; ASP.NET_SessionId=....; .ASPXAUTH=.....' 在消息日志中。

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

欢迎提出任何建议。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    ASP.Net machineKey Generator - CodeProject

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

    【讨论】:

    • 谢谢利兰。我欠你一杯啤酒什么的。我假设机器密钥是每台机器的,并且每个应用程序没有什么不同。它们是两个独立的应用程序。
    • 没问题,蒂姆。很高兴它有帮助。通常它们只是自动生成的——即使是单个应用程序也会给您带来麻烦,因为如果您重新部署(即使在同一台机器上)cookie 将不匹配。当他们的“记住我”复选框不起作用时,最终可能会让用户发疯......
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2014-04-01
    • 1970-01-01
    • 2012-08-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多