0x0 前言

最近在用go语言连接LDAP做用户验证登录时,发现网上关于使用go获取LDAP的BaseDN的文章比较少,遇到问题自己到处找了好多天才最终解决,主要所以写下这篇文章,希望能对其他人有些许借鉴吧~

本文所使用的go库为github.com/go-ldap/ldap,ldap为open ldap。

0x1 获取BaseDN

BaseDN是LDAP进行检索的根路径,检索将会在这儿开始,一般来说一个LDAP可能只会有一个BaseDN,但是在实际中,我们仍有获取LDAP BaseDN的需求。获取BaseDN不需要管理员账户密码。

addr := fmt.Sprintf("%s:%s", config.Address, config.Port)//addr:127.0.0.1:389conn, err := ldap.Dial("tcp", addr)if err != nil {fmt.Printf("GetBaseDN error:%v\n", err)return}defer conn.Close()//获取basednsearch := ldap.NewSearchRequest("", ldap.ScopeBaseObject, ldap.NeverDerefAliases, 0, 0, false, "(objectClass=*)", []string{"namingContexts"}, nil)sr, err := conn.Search(search)if err != nil {fmt.Printf("GetBaseDN error:%v\n", err)return}var resp []*model.BaeDNModel//一般来说 只有一个属性namingContexts,因为Search时设置的只返回namingContextsif len(sr.Entries) > 0 && len(sr.Entries[0].Attributes) > 0 {for _, v := range sr.Entries[0].Attributes[0].Values {var item model.BaeDNModelitem.BaseDN = vresp = append(resp, &item)}}

参考文章https://blog.csdn.net/bytxl/article/details/12572937

0x2 用户验证

LDAP进行用户验证大概需要分为三步:①使用管理员账户密码进行绑定②根据要验证的用户名查找dn③使用要验证的用户dn和密码进行第二次绑定

addr := fmt.Sprintf("%s:%s", m.Address, m.Port)conn, err := ldap.Dial("tcp", addr)if err != nil {ch <- falsereturn}defer conn.Close()err = conn.Bind(m.Account, m.Password)if err != nil {ch <- falsereturn}filter := fmt.Sprintf("(&(%s)(%s=%s))", m.UserFilter, m.UserField, username)//filter:(&(objectClass=person)(uid=username)) 这地方根据自己的需要自定义searchRequest := ldap.NewSearchRequest(m.BaseDN,ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,filter,[]string{"dn"},nil,)sr, err := conn.Search(searchRequest)if err != nil {fmt.Println(err)ch <- falsereturn}if len(sr.Entries) != 1 {fmt.Println("search 0 entry")ch <- falsereturn}userDN := sr.Entries[0].DNerr = conn.Bind(userDN, password)if err != nil {fmt.Printf("bind password error:%v\n", err)ch <- falsereturn}//重新绑定为只读的err = conn.Bind(m.Account, m.Password)if err != nil {ch <- falsereturn}ch <- true}

OK,暂时只用到了这么多,希望能对后来者有所帮助吧,义薄云天~

使用go获取LDAP的baseDN以及验证登录相关推荐

  1. java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...

    java ldap操作实例 LDAP身份验证是世界上最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft为Windows提供的LDAP实现)是另一种广泛使用的 ...

  2. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法

    LDAP身份验证是全球范围内最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft针对Windows的LDAP实现)是另一种广泛使用的LDAP服务器. 在许多项 ...

  3. 爬虫I号 :获取免费代理服务器进行代理验证

    闲来无聊,正儿八经写的个人第一Python小程序 ------爬虫I号:获取免费代理服务器&自动验证 需求: 获取西刺代理网站http://www.xicidaili.com/wn/的免费代理 ...

  4. 用户修改了信息jwt服务器怎么识别,jwt验证登录信息

    为什么要告别session?有这样一个场景,系统的数据量达到千万级,需要几台服务器部署,当一个用户在其中一台服务器登录后,用session保存其登录信息,其他服务器怎么知道该用户登录了?(单点登录), ...

  5. jsf如何与数据库连接_JSF身份验证登录注销数据库示例

    jsf如何与数据库连接 Authentication mechanism allows users to have secure access to the application by valida ...

  6. 本地ASP.NET开发页面使用AzureAD(AAD)验证登录

    Azure和Office365已不是一个热门话题了,因为所谓的云时代已经走进了技术大师们的内心,大家多少有一定了解了,所以就不多介绍了,我的Blog中之前也写了很多关于Azure及Office365的 ...

  7. 本地JAVA开发页面使用AzureAD(AAD)验证登录

    我们前一篇文章介绍了本地使用APS.NET开发的WEB服务如何使用AZURE AD(AAD)验证登录,今天我们主要介绍本地使用JAVA开发的WEB服务如何使用AAD验证登录.其实方法跟ASP.NET是 ...

  8. 使用token验证登录信息,把token存到数据库中

    使用token验证登录信息,把生成的token存到数据库中,根据用户id判断是否重复登录,重复登录就重置到期时间 调用登录接口返回出token和uuid信息 每次访问都需要在Headers里面添加该数 ...

  9. steam验证登录失败_如何向Steam添加两方面身份验证

    steam验证登录失败 If you've been playing PC games in the last few years, the accumulated games in your Ste ...

最新文章

  1. PHP超时处理全面总结
  2. opencv resize_利用OpenCV 识别两张相似的图片
  3. 面试官要我写个shell,现在不让我离开,我是不是被录取了?
  4. 新疆大学计算机考研难吗,新疆大学考研难吗?一般要什么水平才可以进入?
  5. [转]使用jQuery.ajax傳送物件陣列給ASP.NET MVC
  6. linux下openssl编程
  7. python绘制折线图中文图例不显示_python使用matplotlib绘图时图例显示问题的解决...
  8. 全球及中国TEA-月桂酰肌氨酸盐市场调研与竞争调查分析报告2022版
  9. 特征级融合_更丰富的卷积特征用于目标边缘检测(文末附有论文及源码下载)...
  10. 调整cpu和内存查看子机配置
  11. 工作日志WebRoot--编辑页关于处理两个关联的选择框
  12. 从零开始学前端:伪元素和盒子模型 --- 今天你学习了吗?(CSS:Day13)
  13. 4-0 Software Development OKR
  14. CCNA培训视频教程下载
  15. 浏览器缓存机制:强缓存和协商缓存
  16. 【转载】通过搜狗站长平台手动向搜狗搜索提交死链
  17. 转账功能怎么测试?以支付宝转账到银行卡为例
  18. Android中添加商品的购物车
  19. 曾被诉“抄袭”,头条搜索想要突围有点难
  20. CAD图纸该如何修改背景颜色呢?

热门文章

  1. IDEA新建项目配置tomcat
  2. Redis高可用 Sentinel
  3. revit插件建模助手的【快速工具箱】功能
  4. 自搭ngrok服务器
  5. [Splay的应用]
  6. 【计算机组成原理】实验1: 基本逻辑单元实验
  7. 周报 | 吉吉拍数字商品交易平台
  8. Java中HashMap底层实现原理
  9. ​一文了解ICP备案
  10. 用易康对遥感影像进行面向对象分类