4

我正在使用 Windows 身份验证和 ASP.NET 模拟通过 IIS7 对 WCF 服务的用户进行身份验证。

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

那么,我们如何让这个 WCF 服务在禁用匿名身份验证的服务器上运行呢?

更新 1:尝试两个建议后的错误消息:

主机上配置的身份验证方案(“IntegratedWindowsAuthentication”)不允许在绑定“WebHttpBinding”(“匿名”)上配置的身份验证方案。请确保将 SecurityMode 设置为 Transport 或 TransportCredentialOnly。此外,可以通过 IIS 管理工具、通过 ServiceHost.Authentication.AuthenticationSchemes 属性、在元素的应用程序配置文件中更改此应用程序的身份验证方案、通过更新绑定上的 ClientCredentialType 属性或通过调整来解决此问题HttpTransportBindingElement 上的 AuthenticationScheme 属性。

更新 2:身份验证已按以下方式设置:

应用程序池:

  • 身份 = 网络服务

网站:

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

WCF 应用程序:

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

3 回答 3

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

于 2013-08-02T18:59:26.493 回答
1

错误的原因之一是您需要在托管 ASP.net 的服务器上启用 kerberos 委派。这允许 Windows 身份验证令牌传播到 WCF 服务托管服务器。

你看看下面的链接

WCF 中的模拟和委托

于 2013-08-06T12:07:17.887 回答
0

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

  1. 打开 IIS
  2. 选择您的网络应用程序
  3. 单击身份验证图标 (IIS)
  4. 启用 Windows 身份验证
于 2013-10-14T13:05:09.697 回答