繁体   English   中英

WCF Web服务中的委派

[英]Delegation in WCF web service

我有一个WCF Web服务,目前通过WSHttpBinding端点提供传输安全性和Windows客户端凭据类型。 该服务托管在IIS 5.1之上,并使用来自域证书颁发机构的证书配置SSL。 IIS本身在域计算机上以test@domain.com的身份运行。 禁用匿名访问,并且集成Windows身份验证是进行身份验证的唯一方法。

该服务有一个方法,它返回当前的Windows身份名称和模拟级别。 该方法在其OperationBehaviourAttribute中将Impersonation设置为Required。

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public IEnumerable<string> GetInformation()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    return new List<string>()
    {
        identity.Name,
        identity.ImpersonationLevel.ToString()
    };
}

我正在客户端手动构建WCF通道,并允许委托服务。

WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType =
    HttpClientCredentialType.Windows;

EndpointAddress endpoint =
    new EndpointAddress("https://host/DelegateService/Service.svc");

ChannelFactory<ServiceInterface.IService> cf =
    new ChannelFactory<ServiceInterface.IService>(binding, endpoint);

cf.Credentials.Windows.AllowedImpersonationLevel =
    TokenImpersonationLevel.Delegation;

ServiceInterface.IService service = cf.CreateChannel();

客户端是完全受信任的XBAP,其签名的域证书已移至Trusted Publishers证书库。

主机test@domain.com和current@domain.com在域中设置了允许委派,并且没有任何用户被标记为敏感。 当模拟工作时,SeImpersonatePrivilege不应该是问题。

当客户端调用服务方法时,该方法返回“domain \\ current”和“Impersonation”。 我需要的是“域\\当前”和“授权”。 根据http://msdn.microsoft.com/en-us/library/ms730088.aspx上的第二个表,这意味着客户端或服务无法授权。

该域具有Windows 2000 Mixed的功能级别。 我在某处读到这意味着NTLM身份验证,但我认为这涉及到域控制器之间的流量。 当没有在https上运行时,Wireshark在http响应中显示supportedMech: 1.2.840.48018.1.2.2 (MS KRB5 - Microsoft Kerberos 5) ,因此似乎启用了Kerberos。

从技术上讲,我们可以将功能级别提升到Windows 2003,因为我们拥有的两个域控制器都是W2K3服务器,但IT部门目前无法为备份操作分配资源,以及他们想要在他们去提升功能之前做的事情。水平。

我们有一个虚拟测试域,可以升级到Windows Server 2003的功能级别,但是这个域缺少证书颁发机构或安装了IIS的客户端计算机,因此可以引发功能级别用于测试目的,设置其余的基础结构是相当多的工作。

这是一段时间以来我无法解决的问题。 Web似乎充满了“这就是你如何做”这类文章,但我对这些没有任何好运。 有什么想法有什么不对?

您是否在同一IIS主机上运行XBAP和服务?

如果我理解正确 - 你有:client-> XBAP-> WCF。

客户端正在连接到IIS上托管的XBAP。 这可能是通过Kerberos进行身份验证,你似乎暗示它是。

然后第二跳是连接到WCF服务的XBAP。 如果这两个托管在同一个IIS主机上,则不会尝试使用kerberos,并且将使用NTLM。 只有在WCF位于另一台主机上时才会尝试Kerberos。

如果您已经将XBAP和WCF托管在单独的盒子上,那么您就可以通过第二跳认证设置获得经典的kerberos,并且任何“这就是你如何做”这类文章都应该解释它。

(我意识到这个问题是不久前的 - 但我最近才发现它,并且最近才了解Kerberos和2跳问题。)

暂无
暂无

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

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