使用Java和LDAP向AD LDS(ADAM)添加用户
EDIT4:让我的应用程序将用户写入active directory,但当我尝试启用用户时,active directory会发出抱怨使用Java和LDAP向AD LDS(ADAM)添加用户,java,active-directory,ldap,adam,adlds,Java,Active Directory,Ldap,Adam,Adlds,EDIT4:让我的应用程序将用户写入active directory,但当我尝试启用用户时,active directory会发出抱怨 以前的消息 我正在尝试使用Java(1.4)和LDAP将用户添加到本地Active Directory(使用AD LDS)。 但是,我不断遇到以下错误: javax.naming.directory.SchemaViolationException:[LDAP:错误代码65 -0000207B:UpdErr:DSID-030511CF,问题6002(OBJ
以前的消息
我正在尝试使用Java(1.4)和LDAP将用户添加到本地Active Directory(使用AD LDS)。 但是,我不断遇到以下错误: javax.naming.directory.SchemaViolationException:[LDAP:错误代码65 -0000207B:UpdErr:DSID-030511CF,问题6002(OBJ_类违规),数据0];剩余>名称'CN=测试用户,OU=帐户,DC=门户,DC=公司,DC=BE' 我的代码:
public static void main(String[] args) {
try {
DirContext ctx = new InitialDirContext(X_Ldap.getEnvironment());
user usr = new user("Test user", "FALSE");
ctx.bind(
"CN=Test user,OU=Accounts,DC=PORTAL,DC=COMPANY,DC=BE", usr);
// X_Ldap.checkIfUserExists("Test User");
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
编辑 我检查了其中一个用户对象的强制属性,但我不确定应该为所有属性填写什么: cn:Jane Doe——Unicode字符串
instanceType:0x4=(写入)--整数
objectCategory:CN=Person,CN=Schema,CN=Configuration,CN={EDBEACA1-6F60-413C-80F2-6C5CE265F22F}--可分辨名称
objectClass:top;人;组织人员;用户--对象标识符
objectSid:S-1-372665300-2234744891-519896106-1336725265-1748609191-338509570--SID
EDIT2:我当前的代码:
public class newuser {
public static void main(String[] args) {
String userName = "cn=Albert Einstein,ou=Accounts,DC=PORTAL,DC=COMPANY,DC=BE";
// String groupName =
// "cn=Users,cn=Roles,DC=PORTAL,DC=COMPANY,DC=BE";
try {
// Create the initial directory context
System.out.println("Creating initial directory context...");
LdapContext ctx = new InitialLdapContext(X_Ldap.getEnvironment(),
null);
// Create attributes to be associated with the new user
Attributes attrs = new BasicAttributes(true);
// some useful constants from lmaccess.h
int UF_ACCOUNTDISABLE = 0x0002;
int UF_PASSWD_NOTREQD = 0x0020;
int UF_PASSWD_CANT_CHANGE = 0x0040;
int UF_NORMAL_ACCOUNT = 0x0200;
int UF_DONT_EXPIRE_PASSWD = 0x10000;
int UF_PASSWORD_EXPIRED = 0x800000;
attrs.put("objectClass", "user");
attrs.put("cn", "Albert Einstein");
// These are some optional (but useful) attributes
attrs.put("givenName", "Albert");
attrs.put("sn", "Einstein");
attrs.put("displayName", "Albert Einstein");
attrs.put("description", "Research Scientist");
attrs.put("userPrincipalName", "AlbertE@antipodes.com");
attrs.put("mail", "relativity@antipodes.com");
attrs.put("telephoneNumber", "999 123 4567");
String newQuotedPassword = "\"Pass123\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16");
attrs.put("unicodePwd", newUnicodePassword);
attrs.put("msDS-User-Account-Control-Computed",
Integer.toString(UF_NORMAL_ACCOUNT + UF_DONT_EXPIRE_PASSWD));
// Create the context
System.out.println("Creating context...");
Context result = ctx.createSubcontext(userName, attrs);
System.out.println("Created disabled account for: " + userName);
ctx.close();
System.out.println("Successfully created User: " + userName);
} catch (NamingException e) {
System.err.println("Problem creating object: " + e);
}
catch (IOException e) {
System.err.println("Problem creating object: " + e);
}
}
}
仍然存在以下问题:
String newQuotedPassword = "\"Pass123\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16");
attrs.put("unicodePwd", newUnicodePassword);
给我以下例外情况:
正在创建初始目录上下文。。。创建对象时出现问题:
java.io.UnsupportedEncodingException:UTF16LE
注意:我禁用了SSL更改密码的要求
编辑3:显然,“用户帐户控制”不受AD LDS支持,并且被分成许多不同的属性。检查您的模式文档,其中哪些属性是允许的,哪些属性是
person
、User
和organizationalPerson
对象类所必需的。确保代码尝试添加的条目具有所有必需的属性,并且仅具有允许或必需的属性。检查架构文档,查看个人
、用户
和组织人员
对象类允许和需要哪些属性。确保代码尝试添加的条目具有所有必需的属性,并且只有允许或必需的属性。对象类架构冲突意味着您尝试创建的对象中缺少一个或多个必需属性。因此,您需要查看top、person、organizationalPerson和user的模式,并确保您正在设置所有必需的属性。对象类模式冲突意味着您尝试创建的对象中缺少一个或多个必需的属性。因此,您需要查看top、person、organizationalPerson和user的架构,并确保您正在设置所需的所有属性。以下是我在为Active Directory 2008开发用户帐户管理应用程序(ASP.NET)期间学到的一些诀窍:
希望这对您有所帮助以下是我在为Active Directory 2008开发用户帐户管理应用程序(ASP.NET)期间学到的一些诀窍:
希望这对您有所帮助您也许可以特别看看
对我来说,你忘记了“
CN
”属性。你也许可以特别看看
对我来说,你忘记了“
CN
”属性。用对象用户所需的属性更新了问题;我知道应该为CN和objectclass添加什么,但我不确定应该对其他三个添加什么。您确定memberOf
是允许的属性吗?在一些目录服务器中,memberOf
是一个虚拟属性,也就是说,memberOf
是根据请求生成的。我尝试只使用对象类和CN(这是必需的属性)运行它,但是仍然有同样的错误<代码> CN < /C>是所有这些对象类唯一需要的属性吗?除了最琐碎的LDAP客户端之外,所有的属性都应该考虑读取目录模式。模式包含处理ObjectClass和属性(哪些属性是必需的或允许的)所需的所有信息,包括匹配规则和排序规则(必须用于进行比较)。模式的位置应在根DSE中定义为子模式
属性。有关根DSE的更多信息,请参阅此。使用对象用户的必需属性更新了问题;我知道应该为CN和objectclass添加什么,但我不确定应该对其他三个添加什么。您确定memberOf
是允许的属性吗?在一些目录服务器中,memberOf
是一个虚拟属性,也就是说,memberOf
是根据请求生成的。我尝试仅使用对象类和CN(这是必需的属性)运行它,但仍然得到相同的错误CN
是所有这些对象类的唯一必需属性
String newQuotedPassword = "\"Pass123\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16");
attrs.put("unicodePwd", newUnicodePassword);