gpt4 book ai didi

c# - 在 C# 中访问/解析 "msDS-AllowedToActOnBehalfOfOtherIdentity"AD 属性

转载 作者:行者123 更新时间:2023-11-30 22:53:28 25 4
gpt4 key购买 nike

我需要在 C# 中管理 Kerberos Resource Based Delegation(我知道在 Powershell 中更容易,但这不是必需的) . user/computer/service 帐户的属性是 msDS-AllowedToActOnBehalfOfOtherIdentity,但这似乎是一些我看不到的 COM 对象在C#中处理:

static void Main(string[] args)
{
string ou = @"OU=some,OU=ou,DC=corp,DC=com";
string cn = @"someaccount";

DirectoryEntry de = new DirectoryEntry();

de.Username = @"CORP\userwithOUrights";
de.Password = @"password";
de.AuthenticationType = AuthenticationTypes.Secure;
de.Path = $"LDAP://CN={cn},{ou}";
Object a = de.Properties["msDS-AllowedToActOnBehalfOfOtherIdentity"];
}

在此之后,a 与其他属性不同,我似乎无能为力。它是一些 COM 对象,我需要获取其中的帐户。 Powershell 报告此属性返回一个 System.DirectoryServices.ActiveDirectorySecurity 对象,我在此类中看到有用的方法来解码存储在 AD 等中的二进制格式。但这确实似乎不是 C# 中属性调用的返回类型。

最佳答案

更新所有这些现在都在我网站上的一篇文章中得到了更好的记录:Handling NT Security Descriptor attributes


根据 this该属性的“属性语法”是 2.5.5.15。根据this ,这意味着它是一个“String(NT-Sec-Desc)”。根据this ,这意味着它是一个 IADsSecurityDescriptor COM 对象。

您可以在您的项目中添加一个 COM 引用到“Active DS 类型库”并将其直接转换为 IADsSecurityDescriptor,如下所示:

var act = (ActiveDs.IADsSecurityDescriptor)
de.Properties["msDS-AllowedToActOnBehalfOfOtherIdentity"].Value;
Console.WriteLine(act.Owner);

Owner 属性为您提供了一个 DOMAIN\Username

根据 this random code我发现,您似乎也可以使用 RawSecurityDescriptor类与之交互。有 a constructor that takes a plain string ,但您似乎也无法从 DirectoryEntry 的属性中获取原始字符串。

但我确实记得,有时 DirectorySearcher 会为您提供与 DirectoryEntry 不同类型的值(没有意义,但这是事实)。这似乎是真的。 DirectorySearcher 将此属性作为 byte[] 提供给您,并且 RawSecurityDescriptor 确实具有 a constructor that takes a byte[] .

所以看起来你可以做这样的事情:

string ou = @"OU=some,OU=ou,DC=corp,DC=com";
string cn = @"someaccount";

var search = new DirectorySearcher(new DirectoryEntry($"LDAP://{ou}"), $"(cn={cn})");
search.PropertiesToLoad.Add("msDS-AllowedToActOnBehalfOfOtherIdentity");

var result = search.FindOne();

var act = new RawSecurityDescriptor(
(byte[]) result.Properties["msDS-AllowedToActOnBehalfOfOtherIdentity"][0], 0);

Console.WriteLine(act.Owner);

//make changes to act.DiscretionaryAcl

byte[] descriptor_buffer = new byte[act.BinaryLength];
act.GetBinaryForm(descriptor_buffer, 0);

var de = result.GetDirectoryEntry();
de.Properties["msDS-AllowedToActOnBehalfOfOtherIdentity"].Value = descriptor_buffer;
de.CommitChanges();

在此,act.Owner 是一个帐户 SID。

关于c# - 在 C# 中访问/解析 "msDS-AllowedToActOnBehalfOfOtherIdentity"AD 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171940/

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