2013-08-02 99 views
4

我使用Windows身份验证和ASP.NET模拟,通过IIS7对用户进行WCF服务身份验证。如何模拟用户到WCF服务?

在本地调试时,我能够看到System.Security.Principal.WindowsIdentity.GetCurrent()。名称与我的Windows凭据相同。当我将此服务部署到服务器时,除非启用匿名身份验证,否则WCF将无法运行。

那么,我们如何得到这个WCF服务与匿名验证禁用在服务器上运行?

的认证方案主机 ( 'IntegratedWindowsAuthentication')上配置不允许那些 的结合 '的WebHttpBinding' 配置('匿名:尝试都建议后的错误消息:

UPDATE 1 “)。请确保将 SecurityMode设置为Transport或TransportCredentialOnly。 此外,这可以通过改变认证 方案为通过IIS管理工具本申请中,通过 的ServiceHost.Authentication.AuthenticationSchemes属性,则 应用配置文件中的 元件,通过在更新ClientCredentialType属性来解决绑定, 或通过调整 HttpTransportBindingElement上的AuthenticationScheme属性。

更新2

应用程序池:该认证以下面的方式设置

  • 身份=网络服务

网站:

  • 匿名身份验证=禁用
  • ASP.NET验证=启用
  • Windows身份验证=启用

WCF应用:

  • 匿名身份验证=禁用
  • ASP.NET验证=启用
  • Windows身份验证=已启用

回答

3

这是一个常见问题。您需要设置的安全模式和相应的运输单元 - 如果使用basicHttpBinding的 - 把下面的文字中配置

<basicHttpBinding> 
    <binding> 
    <security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Windows" /> 
    </security> 
    </binding> 
</basicHttpBinding> 

阅读下列职位 - http://blogs.msdn.com/b/drnick/archive/2007/03/23/preventing-anonymous-access.aspx http://blogs.msdn.com/b/wenlong/archive/2006/05/18/600603.aspx

+0

谢谢。但是,我们需要使用webHttpBinding而不是basicHttpBinding,这是为了使我们能够为服务定义默认行为。请看看这个问题,看看我们目前收到的错误信息。 – aleafonso

1

其中一个原因错误您需要在托管ASP.net的服务器上启用Kerberos委派。这允许Windows认证令牌传播到WCF服务托管服务器。

你看看下面的链接

Impersonation and Delegation in WCF

HTH

Rauts

+0

非常感谢您的建议。我们已经在AD中启用服务器进行授权并重新测试。不幸的是,该服务仍然无法使用禁用匿名身份验证并启用ASP.NET模拟。显示的错误信息与之前保持一致。任何其他想法? – aleafonso

+0

分别在WCF服务和ASP.Net应用程序上启用了哪些认证?我认为如果你有两个Windows身份验证,它应该工作。 – rauts

+0

请看看这个问题。我刚更新了所有正在使用的认证值。非常感谢 – aleafonso

0

曾有同样的问题。对我来说,这是因为在应用程序的IIS上未启用Windows身份验证。

  1. 打开IIS
  2. 选择你的web应用
  3. 点击验证图标(IIS)
  4. 启用Windows身份验证