我正在为一系列共享相同用户的 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
我有几个问题:
用户条目下方的 jsut 是开始存储首选项的正确位置吗?这个条目应该是什么对象类?我正在尝试组织单位,但似乎不对。
为首选项存储名称值对的最佳方法是什么?在这里,我最好的客人是在具有名称的首选项下方创建一个条目,并在其下方创建值。这样我就可以考虑多个值。这些条目的正确 objectClass 应该是什么?
我正在使用 OpenLDAP 并且不想更改它附带的模式。有没有办法使用可用的模式进行设置?
我们目前正在从陈旧的专有目录服务迁移到 OpenLDAP。今天我们遇到了ldap_search_ext_s或 ldapsearch 一般不返回任何结果的问题,如果当前搜索要返回的条目数量会达到一定的限制。
不幸的是,在 LDAP 服务器配置中设置更高的大小限制可能只会推迟问题的发生,因为我们有一个非常大的数据库,而且我们每天早上运行的更新机制必须执行大量查询。
在 MSDN 文档中,我注意到有一种机制可以执行分页搜索,这可以让我绕过大小限制。显然这也在1996 年的RFC 草案中指定,但还没有最终确定(还)?
无论如何,因为我不是在 Windows-Box 上工作,所以我必须使用 OpenLDAP API,它似乎没有提供这种机制(至少我在他们的搜索页面上找不到)
这让我想到了我的问题:你知道我能做什么,以优雅的方式解决这个问题吗?
谢谢你的帮助!
我在一家拥有多个面向公众的网站的公司工作。
其中一些站点是使用第三方产品(Moveable Type、myBB、Trac 等)构建的。我们还有几个基于 Microsoft 堆栈构建的定制站点。
目前,我们没有统一的认证/授权解决方案;每个站点都实现自己的用户存储。
我热衷于在所有站点上实施统一的用户身份验证。我不希望实现单点登录(如果在切换站点时提示用户输入凭据,这不会很糟糕),但我确实需要每个用户都有一个用户名和密码。
在我看来,最可能的解决方案是实现 LDAP 服务器。我们使用的一些第三方产品支持 LDAP,我可以修改我们的定制站点以使用 LDAP。
但是,我从未使用过 LDAP 存储来管理外部用户(我一直在构建自己的用户存储)。
使用 LDAP 的优缺点是什么?我是否忽略了其他选择?
谢谢
沙
authentication forms-authentication ldap active-directory openldap
好的,这是一个 OpenLDAP 新手问题,请耐心等待。我无法在网络上找到直接的答案,所以我们开始吧:
注意:最终目标是将 OpenLDAP 服务器设置为“单个”查询的代理/缓存,以获取主 LDAP 中的所有结果(如果您熟悉 .Net 的 DirectoryServices dll,则该应用程序只是在 LDAP 上进行 FindAll() 调用)。
我已经知道代理/缓存显示与主服务器相同的结果(即,它代理查询),但它似乎没有缓存。我这么说是因为两个原因:
这是我用于代理/缓存的 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_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) 我一直givenName+" "+surname在CN领域使用,昨晚我醒来时尖叫着'John Smith'怎么样?我可以想象任何一个雇用多个同名人士的大型组织.所以当然这不会起作用.人们用什么代替?
编辑注意:在inetOrgPersonCN中是DN的一部分.
编辑注意:在这种情况下,我期望成长为数十万用户条目.
我们计划使用OpenLDAP进行用户管理,即:所有用户信息都保存在 OpenLDAP 中,从我们的 Java Web 应用程序调用 LDAP 服务进行用户身份验证,然后计划使用 ACL。我对这个 OpenLDAP 完全陌生,因此我有以下基本问题:
在 OpenLDAP 站点中,它说 OpenLDAP 软件是独立于平台的,可用于所有操作系统。但是,当我开始查看文档和常见问题解答 ( http://www.openldap.org/faq/data/cache/8.html ) 时,没有 Windows 平台特定的文档,我在某处读到 OpenLDAP 2.x 是仅适用于 Unix 系统。现在我的问题是:我们没有基于 Windows 的 OpenLDAP 2.x 版软件吗?如果是,我应该从哪里下载?
我发现其中一个网站提到了适用于 Windows 的 OpenLDAP:http : //www.userbooster.com/en/download/openldap-for-windows.aspx。我可以下载它并将其用于我的应用程序吗?它是免费的还是 userbooster 专有的,因为它不是来自 OpenLDAP.org
您是否有任何关于如何从 Java Web 应用程序调用 OpenLDAP 服务器进行用户身份验证的文档或有用链接?在 Java Web 应用程序和 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的原因.
谢谢!
我想将Zend Framework 2与Doctrine 2和openLDAP一起使用.我的目标是为我的LDAP创建持久性.我怎样才能在ZF2中实现这一目标?
我注意到我们可以使用Zend\Ldap\Node从LDAP获取对象.
任何人都可以向我展示如何从LDAP进行搜索并将结果转换为节点和/或可能转换为节点集合的示例吗?
我希望在搜索后能够处理对象.
谢谢
我在我的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) openldap ×10
ldap ×8
.net ×1
c ×1
c# ×1
c++ ×1
credentials ×1
doctrine-orm ×1
passwords ×1
preferences ×1
spring ×1