从 .NET 中的桌面应用程序在 Active Directory 中读取和写入 "uid" 属性
Read and write "uid" property in Active Directory from a desktop application in .NET
我正在尝试操纵 AD 的 uid
属性 来存储一些额外的信息,但是在使用此代码时我得到了一个 UnauthorizedAccessException
:
DirectoryEntry de = new DirectoryEntry("LDAP://somedomain.net");
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectClass=user)(|(cn=" + username + ")(sAMAccountName=" + username + ")))";
ds.PropertiesToLoad.Add("uid");
SearchResult? rs = ds.FindOne();
if (rs != null)
{
DirectoryEntry de = rs.GetDirectoryEntry();
if (rs.Properties.Contains("uid"))
de.Properties["uid"].Value = "123456";
else
de.Properties["uid"].Add("123456");
de.CommitChanges();
}
当我使用相同的代码操作 postalCode
属性 而不是 uid
时,我没有遇到任何问题,所以我真的迷路了。我在域上没有足够的权限来写入 uid
属性 吗?或者我必须以不同的方式访问它吗?
编辑:看来我无法访问除我以外的其他用户的postalCode
属性。我想我必须使用域管理员帐户登录或以某种方式模拟它,但我不知道该怎么做...
It seems I can't access "postalCode" property of another user other than mine. I supose that I have to login with a domain administrator account or impersonate it in some way, but I have no idea of how...
DirectoryEntry
class 构造函数为这种情况采用显式凭据:
DirectoryEntry de = new DirectoryEntry("LDAP://somedomain.net/", "SOMEDOMAIN\Administrator", "sup3rs3cr3t");
我强烈建议不要使用域管理员帐户,而是将目标帐户所需的最低访问权限委托给服务帐户,然后您可以在程序中使用该服务帐户的凭据 - 这样您就可以限制潜在的窃取凭据的人的影响。
我正在尝试操纵 AD 的 uid
属性 来存储一些额外的信息,但是在使用此代码时我得到了一个 UnauthorizedAccessException
:
DirectoryEntry de = new DirectoryEntry("LDAP://somedomain.net");
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectClass=user)(|(cn=" + username + ")(sAMAccountName=" + username + ")))";
ds.PropertiesToLoad.Add("uid");
SearchResult? rs = ds.FindOne();
if (rs != null)
{
DirectoryEntry de = rs.GetDirectoryEntry();
if (rs.Properties.Contains("uid"))
de.Properties["uid"].Value = "123456";
else
de.Properties["uid"].Add("123456");
de.CommitChanges();
}
当我使用相同的代码操作 postalCode
属性 而不是 uid
时,我没有遇到任何问题,所以我真的迷路了。我在域上没有足够的权限来写入 uid
属性 吗?或者我必须以不同的方式访问它吗?
编辑:看来我无法访问除我以外的其他用户的postalCode
属性。我想我必须使用域管理员帐户登录或以某种方式模拟它,但我不知道该怎么做...
It seems I can't access "postalCode" property of another user other than mine. I supose that I have to login with a domain administrator account or impersonate it in some way, but I have no idea of how...
DirectoryEntry
class 构造函数为这种情况采用显式凭据:
DirectoryEntry de = new DirectoryEntry("LDAP://somedomain.net/", "SOMEDOMAIN\Administrator", "sup3rs3cr3t");
我强烈建议不要使用域管理员帐户,而是将目标帐户所需的最低访问权限委托给服务帐户,然后您可以在程序中使用该服务帐户的凭据 - 这样您就可以限制潜在的窃取凭据的人的影响。