gpt4 book ai didi

c# - 验证当前经过身份验证的 Windows 用户是否具有委派权限

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

鉴于我有一个使用 Windows 身份验证的 WCF 服务,我想模拟它们并调用另一个 WCF 服务,如下所示:

using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
// call another WCF service
}

我已经设置了所有配置设置并且它工作正常,只要在客户端,它们包括以下行:

client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;

但是,在尝试调用之前我如何验证用户 token 是否具有委托(delegate)权?即我无法控制的客户端设置了 AllowedPersonationLevel?

如果他们没有设置它,就会抛出各种奇怪的异常(比如无法加载程序集 X 等)。

理想情况下,我希望能够执行以下操作:

using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
if (UserDoesntHaveDelegationRights())
throw new SecurityException("No delegation rights");

// call another WCF service
}

请注意 WindowsIdentity.GetCurrent().ImpersonationLevel 始终等于 TokenImpersonationLevel.Impersonation,因此不幸的是这不是一个选项。

最佳答案

这里的定义可能有些困惑。在impersonation levels方面Windows 标识可以是:

  • 模拟 - 该服务可以在本地模拟用户
  • 委托(delegate) - 该服务可以远程模拟用户

委派的能力非常强大,以至于它在 Active Directory 中受到高度限制:

  1. 客户必须允许委托(delegate)
  2. 执行委派的服务帐户必须在 Active Directory 中标记为“受信任”。

以下是如何enable an account for delegation .它需要 Active Directory 域管理员才能进行更改。我曾经工作过的每个公司环境都有不允许委派的政策。

回到你的问题:

因此虽然 TokenImpersonationLevel.Delegation 存在,但它被认为是一种安全风险并且很少(如果有的话)使用。 TokenImpersonationLevel.Impersonation 是您可能获得的最高级别。

TokenImpersonationLevel.Impersonation 很有用。您仍然可以连接到数据库或作为模拟用户进行远程服务调用。但是远程服务(不在同一个盒子上)不能再次模拟用户。基本的经验法则是“模拟启用两个机器跃点”。如果用户的凭据必须“跳”得更远,它将失败。

如果您需要在许多服务器之间传递用户的凭据,最好的选择是联合安全模型,例如 Windows Identity Foundation (WIF)。参见 Identity Management in Active Directory .

关于c# - 验证当前经过身份验证的 Windows 用户是否具有委派权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15380054/

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