NodeJS 使用LDAPJS更改密码与Weblogic Console设置密码的方式不同吗?

ttisahbt  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(131)

我正在使用ldapjs(3.0.0)更改WeblogicLDAP目录中用户的密码。
我还有一些遗留的Web服务(我无法访问源代码)。
Webservice API执行以下操作:

authenticate(username, password)
    changePassword(username, newPassword)

还有第三种方法可以修改密码:

going into weblogic console, finding the user, and entering a new password.

我想开始使用新的ldapjs代码来修改密码和进行身份验证,但是,目前,我还想在代码的其他部分继续使用现有的webservice API。
这就是我困惑(卡住)的地方
1.如果我使用遗留的Web服务API更改密码,我可以使用LDAPJS和Web服务API对用户进行身份验证。两个都工作得很好!
1.如果我通过Weblogic控制台更改密码,也是一样的。我可以使用LDAPJS和Web服务API进行身份验证。尽管如此,两者都工作得很好!
1.但是,如果我使用ldapjs修改密码(相同的用户,相同的测试密码),我可以在LDAPJS中对用户进行身份验证,但是当我尝试使用webservice API对用户名/密码进行身份验证时,它会失败,并显示“无效密码”。
我没有遗留的Web服务API的源代码,所以我试图了解可能导致问题的原因。通过LDAPJS更改密码是否可能以与通过Weblogic控制台更改密码时Weblogic控制台存储密码的格式不同的格式存储密码?如果是这样的话,这会导致用户名/密码只通过LDAPJS进行身份验证,而通过Web服务API破坏身份验证部分吗?
在我的所有测试中,我使用相同的用户、用户名、领域和WeblogicLDAP服务器。唯一的区别是我使用的方法更改密码。
这是我的更改密码看起来像这样。

export async function ldapChangePassword(username, password) {
  //create the client
  const ldapClient = ldap.createClient({
  url: 'ldap://' + LDAPURL,  //stored in env.local (root directory)
  timeout: 10000, //ms
  connectTimeout: 10000,
});

//bind to the server with a user authorized to perform the password change.
try{
  bindToAdmin(ldapClient);
}catch(err){
  ldapClient.unbind();      
  throw (err)
}finally{

}   

// Set the new password
const dn = `uid=${username},ou=people,ou=myrealm,dc=${DC}`;

const newPassword = 'abcd1234655';
console.log(`Changing password: ${username} ${newPassword}`);

const userPasswordAttribute = new ldap.Attribute({
  type: 'userPassword',
  vals: newPassword
});

  ldapClient.modify(dn, 
    [
      new ldap.Change({
        operation: 'replace',
        modification: userPasswordAttribute
      })
    ],  
    (err) => {
    if (err) {
      console.log(err);
    } else {
      console.log('Password change successful');
    }
    ldapClient.unbind();
  });

}

我的输出看起来像这样:

Changing password: myUserNameABC abcd1234655
Password change successful
wwtsj6pe

wwtsj6pe1#

Mmmmh其实很奇怪,我用你的代码,它的工作fineeeee相反,你救了我,因为我用一些代码,我发现几乎每一个地方,这就像

new ldapjs.Change({
    operation: 'replace',
    modification: {
        userPassword: passwordNew
    }
})

但它从来没有为我工作过,相反,我尝试了一个小的修复(“vals”是不推荐的,所以我使用了“values”),它的workeeed和系统得到了我相同的响应,你有:“密码更改成功”,但在此之后,也试图登录与新的密码,它为我工作!
所以我不明白为什么它不完全为你工作,你确定你正在执行更改psw和登录相同的完全相同的用户dn???
谢谢你,丹尼尔

相关问题