[英]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.