gpt4 book ai didi

c# - WCF Web 服务中的委派

转载 作者:行者123 更新时间:2023-11-30 18:45:15 25 4
gpt4 key购买 nike

我有一个 WCF Web 服务,目前通过具有传输安全性和 Windows 客户端凭据类型的 WSHttpBinding 端点提供服务。该服务托管在 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 channel 并允许委派服务。

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”。我需要的是“domain\current”和“Delegation”。根据 http://msdn.microsoft.com/en-us/library/ms730088.aspx 处的第二张表这意味着客户端或服务无法进行委托(delegate)。

该域的功能级别为 Windows 2000 混合。我在某处读到这意味着 NTLM 身份验证,但我相信它指的是域 Controller 之间的流量。当未在 https 上运行时,Wireshark 在 http 响应中显示 supportedMech: 1.2.840.48018.1.2.2 (MS KRB5 - Microsoft Kerberos 5),因此似乎已启用 Kerberos。

从技术上讲,我们可以将功能级别提高到 Windows 2003,因为我们拥有的两个域 Controller 都是 W2K3 服务器,但 IT 部门目前无法将资源分配给备份操作,而他们希望在执行之前执行这些操作,并且提高功能水平。

我们确实有一个可以升级到 Windows Server 2003 功能级别的虚拟测试域,但是这个域缺少证书颁发机构或安装了 IIS 的客户端计算机,因此虽然可以提高功能级别以进行测试,但设置休息基础设施的工作量很大。

这是我一段时间以来无法解决的问题。网络上似乎充斥着“这就是你的做法”之类的文章,但我对这些没有任何运气。有什么想法吗?

最佳答案

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

如果我没理解错的话 - 你有:client->XBAP->WCF。

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

第二个跃点是连接到 WCF 服务的 XBAP。如果这两者托管在同一台 IIS 主机上,则不会尝试使用 kerberos,而是使用 NTLM。如果 WCF 在另一台主机上,将尝试 Kerberos。

如果您将 XBAP 和 WCF 托管在不同的机器上,那么您将拥有一个经典的 kerberos over 2nd hop 身份验证设置,任何“这就是你如何做”的文章都应该对其进行解释。

(我意识到这个问题是很久以前的事了——但我最近才发现它,并且最近才开始了解 Kerberos 和 2 跳问题。)

关于c# - WCF Web 服务中的委派,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com