标签: openldap

如何在 ldap 目录中存储简单的名称值对

我正在为一系列共享相同用户的 Web 应用程序创建一个用户存储库 ldap 后端。我想在这个 ldap 位置存储偏好信息。这样,与用户相关的所有内容都保存在同一个地方,并且可以在所有应用程序之间共享。

我正在考虑这样的一般结构:

ou=人,dc=域,dc=com
  uid=jdoe,ou=People,dc=domain,dc=com
    ou=Preferences,uid=jdoe,dc=domain,dc=com
      ou=firstpreference,ou=Preferences,uid=jdoe,dc=domain,dc=com
        值:123
        值:456

我有几个问题:

  1. 用户条目下方的 jsut 是开始存储首选项的正确位置吗?这个条目应该是什么对象类?我正在尝试组织单位,但似乎不对。

  2. 为首选项存储名称值对的最佳方法是什么?在这里,我最好的客人是在具有名称的首选项下方创建一个条目,并在其下方创建值。这样我就可以考虑多个值。这些条目的正确 objectClass 应该是什么?

我正在使用 OpenLDAP 并且不想更改它附带的模式。有没有办法使用可用的模式进行设置?

ldap preferences openldap

5
推荐指数
1
解决办法
2417
查看次数

在 OpenLDAP 中分页 ldap_search 以绕过大小限制?

我们目前正在从陈旧的专有目录服务迁移到 OpenLDAP。今天我们遇到了ldap_search_ext_s或 ldapsearch 一般不返回任何结果的问题,如果当前搜索要返回的条目数量会达到一定的限制。

不幸的是,在 LDAP 服务器配置中设置更高的大小限制可能只会推迟问题的发生,因为我们有一个非常大的数据库,而且我们每天早上运行的更新机制必须执行大量查询。

在 MSDN 文档中,我注意到有一种机制可以执行分页搜索,这可以让我绕过大小限制。显然这也在1996 年RFC 草案中指定,但还没有最终确定(还)?

无论如何,因为我不是在 Windows-Box 上工作,所以我必须使用 OpenLDAP API,它似乎没有提供这种机制(至少我在他们的搜索页面上找不到)

这让我想到了我的问题:你知道我能做什么,以优雅的方式解决这个问题吗?

谢谢你的帮助!

c ldap openldap

5
推荐指数
1
解决办法
3419
查看次数

对外部用户使用 LDAP 的利弊

我在一家拥有多个面向公众的网站的公司工作。

其中一些站点是使用第三方产品(Moveable Type、myBB、Trac 等)构建的。我们还有几个基于 Microsoft 堆栈构建的定制站点。

目前,我们没有统一的认证/授权解决方案;每个站点都实现自己的用户存储。

我热衷于在所有站点上实施统一的用户身份验证。我不希望实现单点登录(如果在切换站点时提示用户输入凭据,这不会很糟糕),但我确实需要每个用户都有一个用户名和密码。

在我看来,最可能的解决方案是实现 LDAP 服务器。我们使用的一些第三方产品支持 LDAP,我可以修改我们的定制站点以使用 LDAP。

但是,我从未使用过 LDAP 存储来管理外部用户(我一直在构建自己的用户存储)。

使用 LDAP 的优缺点是什么?我是否忽略了其他选择?

谢谢

authentication forms-authentication ldap active-directory openldap

5
推荐指数
1
解决办法
9478
查看次数

如何配置 OpenLDAP 代理/缓存来缓存所有查询

好的,这是一个 OpenLDAP 新手问题,请耐心等待。我无法在网络上找到直接的答案,所以我们开始吧:

注意:最终目标是将 OpenLDAP 服务器设置为“单个”查询的代理/缓存,以获取主 LDAP 中的所有结果(如果您熟悉 .Net 的 DirectoryServices dll,则该应用程序只是在 LDAP 上进行 FindAll() 调用)。

我已经知道代理/缓存显示与主服务器相同的结果(即,它代理查询),但它似乎没有缓存。我这么说是因为两个原因:

  • 如果我对主 LDAP 中的条目进行更新,我会立即在代理中看到更新的值(使用指向代理 URL 的 LDAP 浏览器),甚至在 TTL 过期之前也是如此。
  • 如果我关闭主 LDAP 并向代理进行查询,则会出现连接异常。如果我没记错的话,我应该得到一个缓存的结果(再一次,TTL 没有过期)。

这是我用于代理/缓存的 OpenLDAP 配置文件(在 Windows 上,OpenLDAP v.2.4.23):


数据库 LDAP

uri "ldap://MyPC"

后缀“dc=local”

rootdn "dc=local"

覆盖缓存

代理缓存 bdb 1000 3 250 432000

目录 ./cache

索引对象类 eq

索引 cn eq,sub

代理缓存查询 100

proxyattrset 0 cn 证书撤销列表

代理模板(对象类=)0 600


有几点值得注意:

  • 我在主 LDAP 的条目中包含“所有”属性作为 proxyattrset 的一部分。我知道这对于缓存/服务预期查询是必要的。因为我想缓存 FindAll() 我认为这是这样做的方法。
  • 一致性检查间隔设置为 5 天(432000 秒)。我希望缓存能够提供缓存查询,即使主服务器已经关闭了那么长时间。另请注意,TTL 设置为 10 …

directoryservices ldap openldap

5
推荐指数
0
解决办法
3931
查看次数

C++使用ldap.h中的ldap_bind

我正在尝试使用ldap_bind,但是得到了这个错误.

error: âldap_bindâ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

码:

#include <lber.h>
#include <ldap.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
    LDAP *ld;

    char *ldap_host = "ldap://localhost";
    int ldap_port   = 389;
    int auth_method = LDAP_AUTH_SIMPLE;
    int desired_version = LDAP_VERSION3;
    char *root_dn   = "ou=people,dc=localhost,dc=local";
    char *root_ps   = "password";

    int result;

    result = ldap_initialize(&ld, ldap_host);

    cout << "result: " << result << endl;

    result = ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &desired_version);

    cout << "result: " << result << endl;

    result …
Run Code Online (Sandbox Code Playgroud)

c++ ldap openldap

5
推荐指数
1
解决办法
5727
查看次数

人们在LDAP目录中使用inetOrgPerson对CN进行了什么操作

我一直givenName+" "+surname在CN领域使用,昨晚我醒来时尖叫着'John Smith'怎么样?我可以想象任何一个雇用多个同名人士的大型组织.所以当然这不会起作用.人们用什么代替?

编辑注意:在inetOrgPersonCN中是DN的一部分.

编辑注意:在这种情况下,我期望成长为数十万用户条目.

ldap schema-design openldap

5
推荐指数
2
解决办法
6601
查看次数

在 Windows 上打开 LDAP

我们计划使用OpenLDAP进行用户管理,即:所有用户信息都保存在 OpenLDAP 中,从我们的 Java Web 应用程序调用 LDAP 服务进行用户身份验证,然后计划使用 ACL。我对这个 OpenLDAP 完全陌生,因此我有以下基本问题:

  1. 在 OpenLDAP 站点中,它说 OpenLDAP 软件是独立于平台的,可用于所有操作系统。但是,当我开始查看文档和常见问题解答 ( http://www.openldap.org/faq/data/cache/8.html ) 时,没有 Windows 平台特定的文档,我在某处读到 OpenLDAP 2.x 是仅适用于 Unix 系统。现在我的问题是:我们没有基于 Windows 的 OpenLDAP 2.x 版软件吗?如果是,我应该从哪里下载?

  2. 我发现其中一个网站提到了适用于 Windows 的 OpenLDAP:http : //www.userbooster.com/en/download/openldap-for-windows.aspx。我可以下载它并将其用于我的应用程序吗?它是免费的还是 userbooster 专有的,因为它不是来自 OpenLDAP.org

  3. 您是否有任何关于如何从 Java Web 应用程序调用 OpenLDAP 服务器进行用户身份验证的文档或有用链接?在 Java Web 应用程序和 OpenLDAP 端进行必要的设置?

有人可以给我一些建议吗?

ldap openldap

5
推荐指数
1
解决办法
2万
查看次数

使用LdapConnection连接到OpenLDAP时出错

        using (LdapConnection ldap = new LdapConnection("localhost:389"))
        {
            //ldap.AuthType = AuthType.Basic;
            ldap.Bind(new NetworkCredential("cn=manager,dc=wave,dc=com", "secret"));
        }
Run Code Online (Sandbox Code Playgroud)

我尝试使用身份验证类型以及身份验证类型.但是它会出现"可分辨名称包含无效语法"的错误

还有一件事是,我不能使用System.DirectoryServices,因为它仅适用于Active Directory,这就是我使用System.DirectoryServices.Protocol的原因.

谢谢!

.net c# active-directory ldapconnection openldap

5
推荐指数
1
解决办法
4931
查看次数

Zend Framework 2 LDAP

我想将Zend Framework 2与Doctrine 2和openLDAP一起使用.我的目标是为我的LDAP创建持久性.我怎样才能在ZF2中实现这一目标?

我注意到我们可以使用Zend\Ldap\Node从LDAP获取对象.

任何人都可以向我展示如何从LDAP进行搜索并将结果转换为节点和/或可能转换为节点集合的示例吗?

我希望在搜索后能够处理对象.

谢谢

openldap doctrine-orm zend-framework2

5
推荐指数
1
解决办法
633
查看次数

在密码更改openldap spring中获取BadCredentialsException

我在我的localhost上运行openldap,我正在尝试从我的spring应用程序更改用户帐户密码,但我得到的是Exception.

请帮忙.

org.springframework.security.authentication.BadCredentialsException: Authentication for password change failed.
    at org.springframework.security.ldap.userdetails.LdapUserDetailsManager$3.executeWithContext(LdapUserDetailsManager.java:204) ~[spring-security-ldap-4.2.2.RELEASE.jar:4.2.2.RELEASE]
    at org.springframework.ldap.core.LdapTemplate.executeWithContext(LdapTemplate.java:817) ~[spring-ldap-core-2.3.1.RELEASE.jar:2.3.1.RELEASE]
    at org.springframework.ldap.core.LdapTemplate.executeReadWrite(LdapTemplate.java:812) ~[spring-ldap-core-2.3.1.RELEASE.jar:2.3.1.RELEASE]
    at org.springframework.security.ldap.userdetails.LdapUserDetailsManager.changePassword(LdapUserDetailsManager.java:191) ~[spring-security-ldap-4.2.2.RELEASE.jar:4.2.2.RELEASE]
    at com.atulsia.controller.UserController.getTemplate(UserController.java:417) ~[classes/:na]
    at com.atulsia.controller.UserController.getAllUsers(UserController.java:437) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
Run Code Online (Sandbox Code Playgroud)

码:

    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl("ldap://localhost:389");
    contextSource.setUserDn("cn=Anil Pawar,cn=mts,ou=mm,dc=example,dc=com");
    contextSource.setPassword("123456");
    try {
        contextSource.afterPropertiesSet();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    LdapTemplate template = new LdapTemplate();
    template.setContextSource(contextSource);

    LdapUserDetailsManager ldapUserDetailsManager  = new LdapUserDetailsManager(template.getContextSource());
    ldapUserDetailsManager.changePassword("123456", "111111");
Run Code Online (Sandbox Code Playgroud)

passwords spring ldap credentials openldap

5
推荐指数
0
解决办法
193
查看次数