Java 是否有一种方法可以更改LDAP密码而不必;“独角兽”;属性
在我的Java 是否有一种方法可以更改LDAP密码而不必;“独角兽”;属性,java,ldap,Java,Ldap,在我的LDAP目录中,我没有名为unicodewd的属性 我所有的userPassword 我编写java来更改userPassword属性。但是,它将其存储为纯文本。 例如 如果我希望我的新密码为newpassword LDAP将其存储为newpassword,并且不会对其进行散列 更改此密码后,我无法使用它进行身份验证 我正在执行此操作的代码的一部分: String quotedPassword = "\"" + newPassword + "\""; byte[]
LDAP
目录中,我没有名为unicodewd
的属性
我所有的userPassword
我编写java来更改userPassword属性。但是,它将其存储为纯文本。
例如
如果我希望我的新密码为newpassword
LDAP将其存储为newpassword
,并且不会对其进行散列
更改此密码后,我无法使用它进行身份验证
我正在执行此操作的代码的一部分:
String quotedPassword = "\"" + newPassword + "\"";
byte[] newUnicodePassword = quotedPassword.getBytes("UTF-16LE");
//String newpass = new String(pwdArray, "UTF8");
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userPassword", newUnicodePassword));
// Perform the update
ctx.modifyAttributes(userName, mods);
我更改了此代码,使其通过哈希密码,但它仍然无法进行身份验证
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(newPassword.getBytes("UTF-16LE"));
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
//String newpass = new String(pwdArray, "UTF8");
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userPassword", sb.toString()));
// Perform the update
ctx.modifyAttributes(userName, mods);
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
md.update(newPassword.getBytes(“UTF-16LE”);
byte byteData[]=md.digest();
//将字节转换为十六进制格式方法1
StringBuffer sb=新的StringBuffer();
for(int i=0;i
您必须使用LDAP扩展操作来执行此操作,以便服务器能够正确处理它,有关详细信息:自己对密码进行哈希运算肯定是错误的。服务器应该这样做。它是哪个服务器?如果是OpenLDAP,则需要将其配置为在slapd.conf或slapd.d中散列密码。或者尝试将其编码为UTF-8。如何判断它是否为OpenLDAP?您不知道正在运行的LDAP服务器是什么?如果有一个slapd.exe
正在运行,或者如果您在某处有一个OpenLDAP
目录,或者一个slapd.conf
文件或slapd.d
目录,那么它就是OpenLDAP。如果无法访问服务器主机,请询问管理员。@EJP这是OpenLDAP。我问我的dba。他告诉我给他一份需要做什么的指示清单。想象一下:)现在我必须阅读如何配置LDAP。也许我应该是一名dba:)好吧,我们来看看manslapd.conf和manslapo策略,假设您使用的是密码策略覆盖,您应该这样做。