.net Openldap支持的控制密码策略

.net Openldap支持的控制密码策略,.net,ldap,openldap,.net,Ldap,Openldap,列出Openldap支持的控件:1.3.6.1.4.1.42.2.27.8.5.1(密码策略) 使用.Net DirectoryServices.Protocols,我已经用尽了检索此控件提供的响应信息的所有可能方法 我使用的是在Cygwin环境中本地构建/运行的最新Openldap源代码,在构建中启用了所有与PPolicy相关的配置,并对PPolicy进行了配置和工作/测试 通过修改目录服务编程指南中的示例,链接: ,以使用已配置为请求的DirectoryControl填充的SearchRe

列出Openldap支持的控件:1.3.6.1.4.1.42.2.27.8.5.1(密码策略)

使用.Net DirectoryServices.Protocols,我已经用尽了检索此控件提供的响应信息的所有可能方法

我使用的是在Cygwin环境中本地构建/运行的最新Openldap源代码,在构建中启用了所有与PPolicy相关的配置,并对PPolicy进行了配置和工作/测试

通过修改目录服务编程指南中的示例,链接:

,以使用已配置为请求的DirectoryControl填充的SearchRequest

密码策略,什么也得不到。 服务器中的所有内容看起来都不错源代码:

有人在SearchRequest中使用.Net DirectoryControls吗

以下是我一直在尝试的一些代码:

    _authConnect.AuthType = AuthType.Basic;
// credentials.UserName is a user DN format, w/password and null domain
_authConnect.Credential = credentials;
Debug.WriteLine("PV: " + _authConnect.SessionOptions.ProtocolVersion);

var sr = //new ExtendedRequest();
         new SearchRequest(credentials.UserName, "(objectclass=*)", SearchScope.Base, null);
         //new DsmlAuthRequest(credentials.UserName);
        var isCritical = false;
    var ppolicy = "1.3.6.1.4.1.42.2.27.8.5.1";
        // ppolicy request and response control is referred to by the same OID
        sr.Controls.Add(new DirectoryControl(ppolicy, null, isCritical, true));
    sr.Controls.Add(new DirectoryControl(ppolicy, new byte[8], isCritical, false));

try
{
  var response = (SearchResponse)_authConnect.SendRequest(sr);
  DirectoryControl[] c = response.Controls;
  if (c.Rank > 0 && c.GetLength(0) > 0)
  {
     Debug.WriteLine(c[0].Type + " value: " + c[0].GetValue());
  }
  SearchResultEntry entry = response.Entries[0];
  c = entry.Controls;
  if (c.Rank > 0 && c.GetLength(0) > 0)
  {
     Debug.WriteLine(c[0].Type + " value: " + c[0].GetValue());
  }  
  return true;
}
catch (LdapException ex)
{
  Debug.WriteLine(ex.Message);
}

我和你有同样的问题,尝试了很多事情都没有成功,然后时间就用完了。我注意到的问题是openldap只在绑定请求中发送密码过期信息。我通过启用服务器上的所有日志记录发现了这一点。所以我开始尝试找到一种方法,在绑定请求中使用目录控件。我找不到一种使用S.DS.P LdapConnection类的方法。然后,我开始对连接对象进行反射,并获取ldaphandle变量。有了它,我可以像S.DS.P那样直接调用c-api。我查看了openldap源代码,注意到它的工具使用了一个sasl绑定机制,但没有任何机制,而在该库中,它又使用了一个简单的控件绑定。它在winldap中的工作方式不同。如果这样做,它将返回错误的参数响应代码。我尝试的最后一件事是调用异步版本的ldap_bind并读回消息。不幸的是,反应中没有控制。我想因为我没有发送它们,所以即使openldap日志文件说它设置了警告,它们也不会被返回。这是我使用任何内置winldap绑定方法的唯一希望


最后一件我要尝试但没有时间的事情是用控件构造我自己的绑定消息,并使用ldap_extended_operation_函数将它们发送到服务器。如果我在这个项目上得到一些额外的时间,我可能会回去尝试一下。如果我这样做了,我会在这里报告。最终,如果这是解决方案,那么使用Novell的ldapcsharp库可能会更容易。看起来可以通过使用绑定请求的服务器控件发送绑定请求。我只是研究了winldap api,因为我对它有点熟悉,而且我们已经非常熟悉使用DirectoryServices.Protocols了。

我遇到了与您相同的问题,尝试了许多失败的方法,但都没有时间了。我注意到的问题是openldap只在绑定请求中发送密码过期信息。我通过启用服务器上的所有日志记录发现了这一点。所以我开始尝试找到一种方法,在绑定请求中使用目录控件。我找不到一种使用S.DS.P LdapConnection类的方法。然后,我开始对连接对象进行反射,并获取ldaphandle变量。有了它,我可以像S.DS.P那样直接调用c-api。我查看了openldap源代码,注意到它的工具使用了一个sasl绑定机制,但没有任何机制,而在该库中,它又使用了一个简单的控件绑定。它在winldap中的工作方式不同。如果这样做,它将返回错误的参数响应代码。我尝试的最后一件事是调用异步版本的ldap_bind并读回消息。不幸的是,反应中没有控制。我想因为我没有发送它们,所以即使openldap日志文件说它设置了警告,它们也不会被返回。这是我使用任何内置winldap绑定方法的唯一希望


最后一件我要尝试但没有时间的事情是用控件构造我自己的绑定消息,并使用ldap_extended_operation_函数将它们发送到服务器。如果我在这个项目上得到一些额外的时间,我可能会回去尝试一下。如果我这样做了,我会在这里报告。最终,如果这是解决方案,那么使用Novell的ldapcsharp库可能会更容易。看起来可以通过使用绑定请求的服务器控件发送绑定请求。我只是研究了winldap api,因为我对它有点熟悉,而且我们已经非常熟悉使用DirectoryServices.Protocols了。

您是否确定用于设置授权状态的身份验证标识(使用bind)是否允许使用该请求控件?“slapd-d-1”的输出中没有任何内容表明存在权限问题。我应该更清楚地说明:目录服务器日志是否指示请求失败,因为授权状态没有使用该控件的权限?顺便说一句,不要在请求中包含响应控制OID。响应控件(如果存在)将显示在服务器的响应中。您是否已确定用于设置授权状态的身份验证标识(使用绑定)是否允许使用该请求控件?“slapd-d-1”的输出中没有任何内容表明存在权限问题。我应该更清楚地说明:目录服务器日志是否指示请求失败,因为授权状态没有使用该控件的权限?顺便说一句,不要在请求中包含响应控制OID。响应控件(如果存在)显示在服务器的响应中。我在绑定请求中也看到了密码过期信息。我相信这会发送回PAM模块+slapd搜索发出的身份验证请求。我简要介绍了如何在Windows上使用PAM模块,但在我看来这并不是最好的解决方案