【问题标题】:WCF Web Services - Multiple Hop impersonation on the same serverWCF Web 服务 - 同一服务器上的多跳模拟
【发布时间】:2011-02-24 04:54:33
【问题描述】:

我有 3 个 Web 服务,都位于同一台服务器上。

我的客户端调用Service A,它冒充客户端调用Service B,一切正常。

现在,我想模拟服务 B 的调用者(这是我的用户名)来调用服务 C。当我使用与以前相同的技术时(AllowedImpersonationLevel = Impersonate, user.Impersonate()),用户没有通过服务 C。相反,服务 C 将用户视为我在 IIS 中运行它的用户(这是一个 UPN,而不是标准的 NETWORK SERVICE 帐户)。

我需要做什么特别的事情才能让它工作吗?这是代表团问题吗? (我认为这不会是委托,因为它们都在同一台服务器上)

谢谢!

【问题讨论】:

    标签: c# .net wcf web-services impersonation


    【解决方案1】:

    在这种情况下您需要委托。您需要的配置是 ImpersonationLevel.Delegation (在配置或代码中设置)。看看 codeplex 上的 WCF 安全指南,它是一个很好的来源。要小心实现委托,特别是在生产环境中,要求不仅仅是在配置文件中选择正确的选项。您需要确保您连接到的应用程序,例如SQL 服务器已配置为进行委派,并且在 Active Directory 等中满足某些基础架构要求,例如服务主体名称 (SPN)。

    【讨论】:

      【解决方案2】:

      您可以尝试在 Service C 上开启 ASP.Net Compatibility

      在 Web.cofig 中

      <system.web>
         <identity impersonate="true"/>
         <authentication mode="Windows"/>
      </system.web>
      <system.serviceModel>
         <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
      </system.serviceModel>
      

      在您的服务类中

      [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
      public class Service : IService
      {
          public string ExecuteRequest(string xmlRequest)
          {
              IRequestManager requestManager = new RequestManager();
              return requestManager.ProcessRequest(xmlRequest);
          }
      
      }
      

      【讨论】:

        【解决方案3】:

        我本来希望必须使用委托,因为您要跨越两次流程边界。你试过 TokenImpersonationLevel.Delegation 吗?

        【讨论】:

          猜你喜欢
          • 2011-04-18
          • 1970-01-01
          • 2011-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-06
          • 2019-03-13
          相关资源
          最近更新 更多