我需要向我的 LDAP 添加一个新的用户条目。以下是我的代码:
javax.naming.Name name = new DistinguishedName("cn=" + userName +",ou=Users,dc=wso2,dc=org");
Attribute objectClass = new BasicAttribute("objectClass");
{
objectClass.add("top");
objectClass.add("inetOrgPerson");
objectClass.add("person");
objectClass.add("organizationalPerson");
}
Attributes userAttributes = new BasicAttributes();
userAttributes.put(objectClass);
userAttributes.put("cn", userName);
userAttributes.put("sn", "abctest");
userAttributes.put(ATTRIBUTE_USER_PASSWORD, password);
LdapTemplate ldapTemplate = (LdapTemplate) SpringBeanFactory
.getBean("ldapTemplate");
ldapTemplate.bind(name, null, userAttributes);
Run Code Online (Sandbox Code Playgroud)
尽管执行这段代码时我得到以下异常:
org.apache.cxf.interceptor.Fault: [LDAP: error code 32 - No Such Object];
nested exception is javax.naming.NameNotFoundException:
[LDAP: error code 32 - No Such Object]; remaining name 'cn=myname,ou=Users,dc=wso2,dc=org'
Run Code Online (Sandbox Code Playgroud)
我遵循http://kaustuvmaji.blogspot.in/2014/12/simple-example-of-spring-ldap.html中指定的示例代码。有人可以帮助我理解此错误的根本原因或正确的代码。
我想在 .NET Core 项目中查询 Active Directory,并通过提供用户 ID 来获取用户的详细信息。
LDAP 服务器路径的格式如下:ldap://
我正在寻找在LDAP服务器中存储配置文件的最佳方法.我的应用程序用于将用户设置保存在xml文件中.用户登录已集中在LDAP服务器中.用户在LDAP服务器中存储为"inetOrgPerson".我想将xml文件附加到每个用户.
最好的方法是什么?标准LDAP模式是否提供存储文本文件的类?或者我是否应该根据我的需求扩展架构?
我编写了以下程序,它连接到两个LDAP存储,比较属性并根据结果创建一个新的csv文件.我遇到了一个问题.
这是代码:
//Define LDAP Connection
string username = "****";
string password = "*****";
string domain = "LDAP://****";
//Define LDAP Connection
string ABSAusername = "****";
string ABSApassword = "****";
string ABSAdomain = "LDAP://****";
//Create Directory Searcher
DirectoryEntry ldapConnection = new DirectoryEntry(domain,username,password);
ldapConnection.AuthenticationType = AuthenticationTypes.Anonymous;
DirectorySearcher ds = new DirectorySearcher(ldapConnection);
ds.Filter = "((EmploymentStatus=0))";
ds.SearchScope = System.DirectoryServices.SearchScope.Subtree;
//Create Directory Searcher
DirectoryEntry ABSAldapConnection = new DirectoryEntry(ABSAdomain, ABSAusername, ABSApassword);
ABSAldapConnection.AuthenticationType = AuthenticationTypes.Anonymous;
DirectorySearcher ABSAds = new DirectorySearcher(ABSAldapConnection);
ABSAds.Filter = "((&(EmploymentStatus=3)(EmploymentStatusDescription=Active))";
ABSAds.SearchScope = System.DirectoryServices.SearchScope.Subtree;
ds.PropertiesToLoad.Add("cn");
ds.PropertiesToLoad.Add …Run Code Online (Sandbox Code Playgroud) 我正在用PHP进行一些LDAP开发,并且在PHP中遇到了一些可能是新手的值赋值.
我的问题是特定于LDAP_MODIFY,但可能是一般问题.我正在尝试更新属性,以下属性为我提供了一个未找到属性的错误:
$email = 'Whitegon024@thedomain.org';
$attributes = array( "userPrincipleName" => "$email");
Run Code Online (Sandbox Code Playgroud)
但以下是成功的:
$attributes = array( "userPrincipalName" => 'Whitegon024@thedomain.org') ;
Run Code Online (Sandbox Code Playgroud)
如果我做了print_r($attributes);其中任何一个我得到:
Array
(
[userPrincipleName] => Whitegon024@thedomain.org
)
Run Code Online (Sandbox Code Playgroud)
有人有线索吗?我确信这是非常简单的事情.
我的代码是:
$user = 'test';
$password = 'testpass';
$host = '10.1.1.1';
$port = 389;
$basedn = 'dc=ci,dc=mycompany,dc=com';
$group = 'Users';
$ldaprdn = 'uid=test,dc=ci,dc=mycompany,dc=com';
$ad = ldap_connect("ldap://$host", $port);
if ($ad) {
echo "Connected" . "<br/>";
} else {
echo ldap_error($ad) . "<br/>";
}
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
// $ldapBind = ldap_bind($ad, "{$user}@{$domain}", $password); // 1.
// $ldapBind = ldap_bind($ad, $user, $password); // 2.
$ldapBind = ldap_bind($ad, $ldaprdn, $password); // 3.
// $ldapBind = ldap_bind($ad, null, null); // 4.
if ($ldapBind) …Run Code Online (Sandbox Code Playgroud) 我目前正致力于将我的应用程序与公司ldap集成.虽然我能够让应用程序实际检查ldap上的用户进行身份验证,但用户无法克服Spring安全性ROLES配置.我得到:"拒绝抱歉,您无权查看此页面." 每次我尝试输入@Secured(['ROLE_USER'])的页面.我想知道如何在LDAP上添加每个用户以获得ROLE_USER,以便他能够完全使用应用程序.
我的ldap配置非常简单:
grails.plugin.springsecurity.providerNames = ['ldapAuthProvider','anonymousAuthenticationProvider','rememberMeAuthenticationProvider']
grails.plugin.springsecurity.ldap.context.anonymousReadOnly = true
grails.plugin.springsecurity.ldap.context.server = "SOME LDAP ADRESS"
grails.plugin.springsecurity.ldap.authorities.groupSearchBase = 'ou=Employees,O=*****,C=****'
grails.plugin.springsecurity.ldap.search.base = 'O=****,C=****'
grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = true
grails.plugin.springsecurity.ldap.authorities.retrieveDatabaseRoles = true
grails.plugin.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}'
grails.plugin.springsecurity.ldap.search.attributesToReturn = null
Run Code Online (Sandbox Code Playgroud)
Spring安全核心是默认核心:
// Added by the Spring Security Core plugin:
grails.plugin.springsecurity.userLookup.userDomainClassName = 'amelinium1.grails.SecUser'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'amelinium1.grails.SecUserSecRole'
grails.plugin.springsecurity.authority.className = 'amelinium1.grails.SecRole'
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
'/**': ['permitAll'],
'/**/systeminfo': ['permitAll'],
'/**/js/**': ['permitAll'],
'/**/css/**': ['permitAll'],
'/**/images/**': ['permitAll']]
grails.plugin.springsecurity.logout.postOnly = false
Run Code Online (Sandbox Code Playgroud)
提供文档http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/single.pdf似乎不是最新的,即使是2.0版本的Spring Security核心.我试图实现Custom GrailsUser和GrailsUserDetailsService,但它们似乎与插件的其余部分混合在一起.(基于文档的实现).
任何人都可以向我指出正确的方向,并提供有关如何在最新版本2.0-RC2中实施LDAP的一些信息?
编辑
我的CustomUserDetailsService类,但我不确定它是否正确配置LDAP:
class CustomUserDetailsService implements GrailsUserDetailsService{
@Override
public …Run Code Online (Sandbox Code Playgroud) 我有此代码针对LDAP目录验证用户身份。密码错误时返回false,但是如果密码为空,则无论如何都会对用户进行身份验证。有什么想法可能会发生吗?
if (@ldap_bind($ds, $user_dn, $password) || sha1($password) == '484h84h4hf4Ffwj49393393j93j')
{
$valid = true;
}
else $valid = false;
Run Code Online (Sandbox Code Playgroud) 我在Spring Boot Application中实现了LDAP身份验证.添加的依赖项如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-all</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是我仍然得到以下ClassNotFoundException:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain'
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]
Caused by: java.lang.NoClassDefFoundError: org/apache/directory/server/core/DirectoryService
Caused by: java.lang.ClassNotFoundException: org.apache.directory.server.core.DirectoryService
Run Code Online (Sandbox Code Playgroud)
我的maven依赖树清楚地显示了apacheds-all成功添加.

为什么我仍然会收到此错误?
InitialLdapContext如果知道专有名称,则JNDI 类允许我在一行中检索LDAP条目的属性:
Attributes attributes = ctx.getAttributes(entryDN);
Run Code Online (Sandbox Code Playgroud)
但是,这不包括操作属性,例如entryCSN,modifyTimestamp等。当然,始终可以指定要通过字符串数组获取的属性:
Attributes attributes = ctx.getAttributes(entryDN, new String[] {"entryCSN"});
Run Code Online (Sandbox Code Playgroud)
但是,仅返回指定的属性。
我尝试过但不适合我的事情:
通过检索属性 ctx.search()
我知道我可以通过搜索获取所有属性(请参阅此处),但是我不希望a)如果我已经知道dn则进行整个Ldap查询,并且b)麻烦地处理搜索结果集。
仅对操作属性进行第二次查询
当然,我只能执行第二个查询,但是我想保存额外的行程并将第二个属性添加到第一个属性中,如下所示:
Attributes attributes = ctx.getAttributes(entryDN);
attributes.put(ctx.getAttributes(entryDN, new String[] {"entryCSN"}).get("entryCSN"));
Run Code Online (Sandbox Code Playgroud)
导致NoSuchElementException。堆栈跟踪:
Exception thrown: java.util.NoSuchElementException: Vector Enumeration
at java.util.Vector$1.nextElement(Vector.java:352)
at javax.naming.directory.BasicAttribute$ValuesEnumImpl.nextElement(BasicAttribute.java:537)
Run Code Online (Sandbox Code Playgroud)列出字符串数组中的所有属性
由于返回的Ldap条目可以是不同的对象类,因此具有不同的属性,因此我认为没有实际的方法。
有谁知道如何一次获得正常属性和操作属性?
ldap ×10
php ×3
java ×2
spring ×2
.net-core ×1
attributes ×1
c# ×1
grails ×1
jndi ×1
settings ×1
spring-boot ×1
spring-ldap ×1