【问题标题】:How to impersonate a user to a WCF service?如何模拟用户使用 WCF 服务?
【发布时间】:2013-08-03 22:12:43
【问题描述】:

我正在使用 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 属性, 或通过调整 AuthenticationScheme 属性 HttpTransportBindingElement。

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

应用程序池:

  • 身份 = 网络服务

网站:

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

WCF 应用程序:

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

【问题讨论】:

    标签: wcf authentication iis impersonation


    【解决方案1】:

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

    你看看下面的链接

    Impersonation and Delegation in WCF

    【讨论】:

    • 非常感谢您的建议。我们已在 AD 中启用服务器进行委派并重新测试。不幸的是,在禁用匿名身份验证和启用 ASP.NET 模拟的情况下,该服务仍然无法工作。显示的错误消息与以前相同。还有其他想法吗?
    • 您分别在 WCF 服务和 ASP.Net 应用程序上启用了哪些身份验证?我认为如果您同时拥有 Windows 身份验证,它应该可以工作。
    • 请看问题。我刚刚使用所有正在使用的身份验证值对其进行了更新。非常感谢
    • 您对这里可能发生的事情还有其他线索吗?不幸的是,我们仍在努力使这项工作没有成功......任何帮助将不胜感激。问候
    【解决方案2】:

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

    1. 打开 IIS
    2. 选择您的网络应用程序
    3. 单击身份验证图标 (IIS)
    4. 启用 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

      【讨论】:

      • 谢谢。但是,我们需要使用 webHttpBinding 而不是 basicHttpBinding,这是为了让我们能够为服务定义默认行为。请查看问题以查看我们当前收到的错误消息。
      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2011-05-21
      • 2014-11-21
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多