【问题标题】:WCF Service, Windows AuthenticationWCF 服务、Windows 身份验证
【发布时间】:2009-09-02 13:19:29
【问题描述】:

我们编写了一个 WCF 服务,部署在 IIS 上。我们选择了集成 Windows 身份验证。在这种情况下不能使用服务,但是如果我们可以将 IIS 虚拟目录的身份验证方法设置为 WCF 服务的“匿名”,那么错误就会消失。但是我们的 WCF 服务不接受“匿名”。我们必须使用集成 Windows 身份验证来验证客户端。有谁知道如何解决这个问题?

提前致谢,

阿什

【问题讨论】:

  • 你能显示一下显示客户端和wcf服务配置的配置文件吗?

标签: c# wcf web-services security windows-authentication


【解决方案1】:

你必须做几件事:

  • 从您的虚拟文件夹中取消选中匿名访问并检查集成的 windows 安全性。
  • 创建以下绑定配置:

      <basicHttpBinding>
     <binding name="Binding1">
        <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"  />
        </security>
     </binding>
     </basicHttpBinding>
    
  • 将上述配置应用到您的服务和 mex:

       <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IService">
    </endpoint>
    
    
       <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IMetadataExchange">
    </endpoint>
    
    • 创建一个客户端并使用 NetworkCredential 传递您的凭据:

             ServiceReference.MyClient proxy = new ServiceReference.MyClient();
             proxy.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("MACHINENAME\\USERACCOUNT", "passwrd");
             proxy.YourServiceOperation();
      

还有其他方法可以单独设置用户名和密码,但在 .Net 4.0 中不起作用。 USERACCOUNT 是您的 WCF 主机加入的域帐户或 LDAP。 如果服务器未加入域,则通过运行“lusrmgr.msc”在本地创建一个帐户

【讨论】:

    【解决方案2】:

    您需要注意两个主要事项:

    1. 您的配置是否一致:IIS、web.config(system.web 和 WCF)
    2. 您的客户端是否在请求中发送 Windows 身份验证信息

    这可能是给您带来问题的第二个问题。 IIS 日志应包含正在调用的用户。

    【讨论】:

    • 实际上,如果我允许集成 Windows 身份验证,没有匿名,则客户端窗口应用程序无法访问服务本身,即使在服务器上如果我浏览服务,它也会显示以下错误“此服务的安全设置需要“匿名”身份验证,但托管此服务的 IIS 应用程序未启用它。”
    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2013-02-22
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多