- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 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/
我需要在 C# 中管理 Kerberos Resource Based Delegation(我知道在 Powershell 中更容易,但这不是必需的) . user/computer/service
我是一名优秀的程序员,十分优秀!