繁体   English   中英

WCF Web服务 - 在同一服务器上进行多跳模拟

[英]WCF Web Services - Multiple Hop impersonation on the same server

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

我的客户端称服务A,它冒充客户端呼叫服务B,一切都很顺利。

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

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

谢谢!

您可以尝试在服务C上启用ASP.Net兼容性

在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);
    }

}

我原本期望必须使用委托,因为你跨越了两次进程边界。 你试过TokenImpersonationLevel.Delegation吗?

您需要在此方案中委派。 您需要的配置是ImpersonationLevel.Delegation(在配置或代码中设置)。 看一下关于codeplex的WCF安全指南,它是一个非常好的资源。 小心实现委托,特别是在生产环境中,要求不仅仅是在配置文件中选择正确的选项。 您需要确保连接到的应用程序(例如SQL Server)已配置为委派,并且在活动目录等中满足某些基础结构要求,例如服务主体名称(SPN)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM