美文网首页
golang使用ldap修改用户的密码

golang使用ldap修改用户的密码

作者: 東玖零 | 来源:发表于2023-09-11 20:11 被阅读0次

背景:公司原有的修改密码是一个前后端不分离的项目,而且非常古老,于是就想着在新项目中使用ldap出一个修改密码的接口。

经历:基本花了两天去踩各种坑,遇到的主要报错有:
1、LDAP Result Code 2 "Protocol Error"这个报错是使用库里封装的结构体ldap.PasswordModifyRequest,进行修改密码报的错误。

2、LDAP Result Code 53 "Unwilling To Perform"这个报错是使用修改结构体ldap.NewModifyRequest,进行修改密码报的错误。

如果有时间看代码库的问题,可以解决大部分问题。

这个协议查询和修改的端口都不一样,查询端口是389,修改端口是636。

实践得出不配置证书,可以给用户添加属性或修改添加的属性,但修改密码就是报53,不予执行。

最后发现我配置证书加载到RootCAs上了,而正确的是配置在ClientCAs上。

我从运维那里得到的证书是cer后缀的,需要转换成crt后缀,转换命令如下:

openssl x509 -inform DER -in 证书.cer -out 证书.crt

具体代码如下:

// 读取证书文件,使用命令将cer证书转成crt证书(openssl x509 -inform DER -in 202211.cer -out 202211.crt)    
caCert, err := ioutil.ReadFile("conf/zhengshu.crt")
if err != nil {
    logs.Info("读取证书文件失败", err.Error())
    return
}
// 创建根证书池
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
// 创建TLS配置
tlsConfig := &tls.Config{
    // RootCAs: rootCertPool,
    ClientCAs: caCertPool,
    // ClientAuth:         tls.RequestClientCert,
    InsecureSkipVerify: true, // 跳过服务器下发的证书验证
}
// 连接到LDAP服务器
l, err := ldap.DialTLS("tcp", "192.168.x.xx:636", tlsConfig)
if err != nil {
    logs.Info("LDAP连接失败", err.Error())
    return 
}
defer l.Close()
// 设置写操作用户
_, err = l.SimpleBind(&ldap.SimpleBindRequest{
    Username: "sysadmin",
    Password: "密码",
})
if err != nil {
    logs.Info("用户绑定失败", err.Error())
    return
}
utf16 := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
pwdEncoded, err := utf16.NewEncoder().String("\"" + password + "\"")
if err != nil {
    logs.Info(dn, password, "密码unicode编码失败", err.Error())
    return
}
passwordModify := ldap.NewModifyRequest(dn, nil)
passwordModify.Replace("unicodePwd", []string{pwdEncoded})
passwordModify.Replace("userAccountControl", []string{"512"})
err = l.Modify(passwordModify)
if err != nil {
    logs.Info(dn, password, "密码修改失败!", err.Error())
    return
}
logs.Info("密码修改成功!")

最后希望使用ldap的同鞋少遇见BUG,顺利搞定修改密码功能。

后记:经验告诉我们,校验登录还是修改密码,都需要先用管理员账号获取普通账号的DN,然后用户通过DN去操作。

相关文章

  • MySQL数据库密码的管理

    记得原密码 root用户修改自己的密码使用mysqladmin命令来修改root密码mysqladmin -u u...

  • mysql5.7

    使用yum安装 启动服务 修改初始密码 初始密码查看方式: 第一次必须修改密码: 创建用户 删除用户 授权 创建数...

  • 升级hue遇到的问题

    LDAP的密码不正确: 尝试修改密码: 升级hue完成后对hive进行测试: hue的log位置:

  • python3 使用ldap3来作为django认证后台

    首先先使用ldap3测试ldap服务是否正常 我们先要拿到dc的数据,以及连接ldap的密码,还有搜索的字段(se...

  • 【linux笔记】root密码登录

    如何使用root密码登录,而不是使用证书: 修改root密码 sudo passwd root 进入root用户 ...

  • 安装ssh环境

    1 配置root用户密码 1.1 修改root用户的初始密码 退出当前用户,使用root登陆系统。 1.2 关闭防...

  • ubuntu 配置

    1.默认使用ubuntu用户登录,密码为服务器配置时设置的密码,可在重置密码中修改 2.修改 root 密码 su...

  • 修改Mac的root密码

    使用命令sudo passwd root然后提示输入当前登录用户的密码,输入之后可以修改root用户密码

  • 2.7 密码修改界面功能设计

    修改密码 主要画面功能介绍 用户登录过后点击修改密码,进入修改用户密码界面,输入自己想要修改的密码以及确认密码。点...

  • 6.passwd

    passwd命令:修改用户密码(自己或指定其他用户) 1.修改用户自己的密码 2.修改其它用户密码

网友评论

      本文标题:golang使用ldap修改用户的密码

      本文链接:https://www.haomeiwen.com/subject/jftyvdtx.html