无法使用webhttpbinding获取用户凭据以对WCF服务进行JSON调用

时间:2009-06-05 09:26:01

标签: c# wcf json wcf-binding wcf-security

希望有人可以提供帮助!

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

服务器端任务:

  1. IIS服务器是域
  2. 的成员
  3. 在AD用户&中设置IIS服务器计算机帐户计算机MMC称为“值得信赖的代表团”
  4. 必须重新启动IIS服务器才能使此策略生效。
  5. 仅必须为站点/虚拟目录选择集成Windows身份验证
  6. IIS不能将NTLM仅设置为身份验证方法(这通常不是问题,NEGOTIATE是默认值,因此除非您专门运行脚本来更改此功能,否则不要担心)。
  7. IIS服务器名称必须与AD中的帐户名称完全匹配,或者在将IIS站点设置为备用名称的情况下应使用SetSPN工具(例如,服务器名为server01.domain.com,网站名为www.application。 COM)。
  8. 客户端任务

    1. 客户端必须使用IE 5.x +。如果客户端正在运行IE 6,请确保从“工具”>中选择“启用集成Windows身份验证(需要重新启动)”。互联网选项>高级。
    2. 网站必须被识别为客户端的本地Intranet(非Internet区域)站点。我没有看到任何文件解释原因,但我从来没有能够让它工作否则。如有必要,请将其添加到“本地Intranet站点”列表中。
    3. 客户帐户不得在AD用户和计算机MMC中标记为“敏感,不委派”。
    4. 使用wsHTTPBinding时,一切都很好用。但是要使JSON正常工作,我必须使用WebHttpBinding。 然后我需要获取用户凭证,以便我可以使用模拟与后端服务进行通信。

      我在WFC配置中的绑定如下: 我用http://underground.infovark.com/2008/03/21/wcf-webhttp-binding-and-authentication/ 帮助:

      <webHttpBinding>
          <binding name="AjaxBinding">
              <security mode="None">
                   <transport clientCredentialType="Ntlm" />
               </security>
           </binding>
      </webHttpBinding>
      
      <endpoint name="DataJson" address="Datajson" binding="webHttpBinding" 
              bindingConfiguration="AjaxBinding" 
              behaviorConfiguration="jsonbehaviour" contract="MyContract"/>
      
      <behavior name="jsonbehaviour">
           <!--<webHttp/>-->
           <enableWebScript/>
      </behavior>
      

      它正在成功调用WCF服务,但除了匿名之外我无法得到任何内容:HttpContext.Current.User.IdentityServiceSecurityContext.Current.WindowsIdentity所以我无法做到:

      WindowsIdentity identity = (WindowsIdentity)HttpContext.Current.User.Identity();
      
      using (identity.Impersonate())
      {
          // ... code to call application B goes here ...
      }
      

      我尝试将此添加到web.config中,以防我读到多个身份:

                    <deny users="?"/>
      

      任何想法?

1 个答案:

答案 0 :(得分:1)

  • 您的配置中是否包含此部分?

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

这些是我在我的“列表”中唯一可以检查的事项,当你进行集成身份验证时,你没有在你的问题中明确提到。希望有帮助吗?