【问题标题】:LDAP Error: The user has insufficient access rights. : LdapErr: DSID-0C09099D, comment: Error processing control,LDAP 错误:用户没有足够的访问权限。 :LdapErr:DSID-0C09099D,注释:错误处理控制,
【发布时间】:2022-01-26 11:10:41
【问题描述】:

我想使用 C# 从 Active Directory 获得增量更改,为此我正在尝试构建一个解决方案,如下文所述(使用 DirSync 控件)。

https://docs.microsoft.com/en-us/windows/win32/ad/polling-for-changes-using-the-dirsync-control

但是,我面临以下问题:

  1. 使用以下代码时,我收到The user has insufficient access rights 的异常。该用户是管理员组的成员。

还需要向该帐户授予什么权限?以及如何?

LdapConnection connection = new LdapConnection("adfs.fed.zzz.com");
connection.SessionOptions.ProtocolVersion = 3;
connection.Credential = new System.Net.NetworkCredential("adfsfed\\username", "password");
connection.AuthType = AuthType.Basic;
connection.Bind();

var filter = "(&(objectClass=*))";
var searchRequest = new SearchRequest("", filter, SearchScope.Subtree, properties);

DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(null, DirectorySynchronizationOptions.None);
searchRequest.Controls.Add(dirSyncRC);

var response = connection.SendRequest(searchRequest) as SearchResponse;
  1. 如果我使用下面的代码,那么我不会收到任何异常,但会在 cookie 中得到空结果。
String[] properties = { "objectGUID", "sAMAccountName", "displayName", "mail", "member" };
String filter = "(|(objectClass=group)(objectClass=user))";
DirectorySearcher directorySearcher = new DirectorySearcher(myLdapConnection, filter, properties);
var dSynch = new DirectorySynchronization(System.DirectoryServices.DirectorySynchronizationOptions.None); 
directorySearcher.DirectorySynchronization = dSynch;
directorySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
var results = directorySearcher.FindAll();
var cookie = dSynch.GetDirectorySynchronizationCookie();

注意事项:

  1. 我只有一个域控制器
  2. 我是系统管理员。因此,我可以为用户分配适当的权限。

请帮忙。

【问题讨论】:

    标签: active-directory ldap directoryservices adsi directorysearcher


    【解决方案1】:

    • 您的用户 ID 需要“复制目录更改”权限,并且应该是“域管理员”组的成员才能使用 DirSync LDAP 控制扩展。但请注意,无论标准权限如何,它几乎都可以读取目录分区中的任何内容。虽然他们无法改变任何事情。

    但是 - 您的目录中可能有一些敏感的属性。请参考以下链接中的 powershell 脚本,并在使用 C# 授予适当权限后使用用户 ID 执行它。它是一个目录同步代码,甚至可以检索诸如'userAccountControl、userparameters、msexchuseraccountcontrol、pwdlastset、unicodePwd(空白,因此不返回散列的域密码)、锁定时间、帐户过期、unixuserpassword(返回其哈希)等属性。

    http://dloder.blogspot.com/2012/01/powershell-dirsync-sample.html

    【讨论】:

    • 感谢@KartikBhiwapurkar-MT 的回复。根据您的示例代码,我发现我的代码出了什么问题,它现在可以工作了。我在下面发布解释作为答案。
    • 您好@Kushal Arora,如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。
    【解决方案2】:

    根据@KartikBhiwapurkar-MT 给出的回复,我发现了这个错误。

    1. 错误The user has insufficient access rights 完全是误导(用户已经拥有复制目录更改 权限并且是域管理员 组的成员)。 System.DirectoryServices.Protocols 中发生的错误是我将 "" 作为第一个参数(distinguishedName)传递出去
    new SearchRequest("", filter, SearchScope.Subtree, properties);
    

    但它应该被传递为

    new SearchRequest("DC=adfs,DC=fed,DC=zzz,DC=com", filter, SearchScope.Subtree, properties);
    
    1. 由于最新的 nuget 包 (6.0.0) 中的错误,我在 System.DirectoryServices 中得到了空 cookie。在撰写此答案时,该错误仍然存​​在。

    Reference to bug

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2015-10-03
      • 2019-10-13
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多