Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用webhttpbinding获取对WCF服务的JSON调用的用户凭据_C#_Wcf_Json_Wcf Binding_Wcf Security - Fatal编程技术网

C# 无法使用webhttpbinding获取对WCF服务的JSON调用的用户凭据

C# 无法使用webhttpbinding获取对WCF服务的JSON调用的用户凭据,c#,wcf,json,wcf-binding,wcf-security,C#,Wcf,Json,Wcf Binding,Wcf Security,希望有人能帮忙 我正在使用JSON调用WCF服务,但无法获取用户凭据。 我们正在使用Kerberos,因此IIS的设置如下所示: 服务器端任务: IIS服务器是域的成员 将AD用户和计算机MMC中的IIS服务器计算机帐户设置为“受信任的委派” 必须重新启动IIS服务器,此策略才能生效 必须为站点/虚拟目录选择“仅集成Windows身份验证” IIS不能将NTLM only设置为身份验证方法(这通常不是问题,协商是默认设置,因此除非您专门运行脚本来更改此设置,否则不要担心) IIS服务器名称必须与

希望有人能帮忙

我正在使用JSON调用WCF服务,但无法获取用户凭据。
我们正在使用Kerberos,因此IIS的设置如下所示:

服务器端任务:
  • IIS服务器是域的成员
  • 将AD用户和计算机MMC中的IIS服务器计算机帐户设置为“受信任的委派”
  • 必须重新启动IIS服务器,此策略才能生效
  • 必须为站点/虚拟目录选择“仅集成Windows身份验证”
  • IIS不能将NTLM only设置为身份验证方法(这通常不是问题,协商是默认设置,因此除非您专门运行脚本来更改此设置,否则不要担心)
  • IIS服务器名称必须与AD中的帐户名称完全匹配,或者在将IIS站点设置为备选名称的情况下(例如,服务器名为server01.domain.com,网站名为www.application.com)应使用SetSPN工具
  • 客户端任务
  • 客户端必须使用IE 5.x+。如果客户端正在运行IE 6,请确保从“工具”>“Internet选项”>“高级”中选择“启用集成Windows身份验证(需要重新启动)”
  • 网站必须被识别为客户端的本地Intranet(非Internet区域)站点。我还没有看到任何文档来解释原因,但我只是一直无法让它以其他方式工作。如有必要,请特别将其添加到本地Intranet站点列表中
  • 在AD用户和计算机MMC中,客户端帐户不得标记为“敏感,请勿委派” 使用wsHTTPBinding时,一切都很好。然而,为了让JSON正常工作,我必须使用WebHttpBinding。 然后,我需要获取用户凭据,以便使用模拟与后端服务进行对话

    我在WFC配置中的绑定如下: 我曾经 帮助:

    我已尝试将其添加到web.config中,以防我阅读到多个标识:

                  <deny users="?"/>
    
    
    
    有什么想法吗?

    • 你的配置中有这个部分吗

      <system.web>
      <identity impersonate="true"/>
      
      
      
      • 您的应用程序池在哪个帐户下运行?(网络服务对吗?)
      • 您可能在域上没有重复的SPN

    在我的“列表”中,只有这些东西在进行集成身份验证时需要检查,您在问题中没有明确提到。希望有帮助?

    Rihan,谢谢你的快速回复:)我已经试过了。它是否在那里似乎没有任何区别。应用程序池配置为使用域帐户,而不是NetworkService。我确信没有重复的SPN。请注意,尽管我们在IIS中启用了匿名访问。似乎如果我在IIS中关闭它,它就会开始工作。但是,一旦wcf服务重新命名,wcf服务就会表示此服务的安全设置需要“匿名”身份验证,但不会为承载此服务的IIS应用程序启用此身份验证。我相信这是由于我们的其他端点使用wsHttpAuthentication。您的网站上是否设置了连接tiemout?我曾经遇到过一个问题,在设置了HTTP Keep Alives之后,Enable HTTP Keep Alives没有设置,它只是不想工作。听起来好像你已经尝试过了所有的东西,通常是当我认为下面的KB在ISS日志中有任何有用的信息时,在IIS中启用匿名访问,你永远无法得到调用方的凭据,因为它覆盖了集成的安全性和所有其他的安全设置(摘要等等)。。如果您对网站访问的文件应用NTFS安全性,但不向运行应用程序池的用户提供对这些文件的访问权限,但向经过身份验证的用户提供访问权限,会发生什么情况?
                  <deny users="?"/>
    
    <system.web>
    <identity impersonate="true"/>