深入剖析VB.NET验证LDAP用户身份
创始人
2024-06-19 21:20:46
0

VB.NET对于开发人员来说是一个功能非常强大的开发语言。它的功能特点非常突出,比如不能够提供一个安全性非常高的开发环境等。前几天花了两天时间研究如何实现VB.NET验证LDAP用户身份,看了一些java和vb的代码,碰了不少钉子,试验再试验,终于搞定,与大家分享... #t#

首先,我要讲的LDAP不是微软的Active Directory目录服务,而是运行在SUN One上面的目录服务。

请看VB.NET验证LDAP用户身份的代码(部分敏感信息删节):

  1. Private Sub btnTest_Click()Sub btnTest_
    Click(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles 
    btnTest.Click  
  2. Dim LoginName As String = txtUser.Text  
  3. Dim LoginPwd As String = txtPwd.Text  
  4. If LoginPwd = "" Then  
  5. txtResult.Text = "* Password can not be blank." 
  6. Exit Sub  
  7. End If  
  8. Dim myDirectorySearcher As DirectorySearcher  
  9. Dim mySearchResult As SearchResult  
  10. Dim myDirectoryEntry As DirectoryEntry  
  11. Dim UserName As String  
  12. txtResult.Text = "" 
  13. Try  
  14. If myDirectoryEntry.Exists("LDAP:
    //ldapserver.com/uid=" & LoginName & ",
    ou=people,ou=intranet,dc=yourdomainname,
    dc=com") Then  
  15. Try  
  16. myDirectoryEntry = New DirectoryEntry
    ("LDAP://ldapserver.com/ou=people,
    ou=intranet,dc=yourdomainname,dc=com", 
    "uid=" & LoginName & ",ou=people,ou=intranet,
    dc=yourdomainname,dc=com", LoginPwd, 
    AuthenticationTypes.ServerBind)  
  17. myDirectorySearcher = New Directory
    Searcher(myDirectoryEntry)  
  18. myDirectorySearcher.Filter = "
    (uid="
     & txtUser.Text & ")"  
  19. myDirectorySearcher.PropertiesToLoad.
    Add("DisplayLastName")  
  20. myDirectorySearcher.PropertiesToLoad.
    Add("DisplayFirstName")  
  21. mySearchResult = myDirectorySearcher.FindOne  
  22. If mySearchResult Is Nothing Then  
  23. txtResult.Text += "* Login failed."  
  24. Else  
  25. txtResult.Text += ">>> Login passed!" & vbCrLf  
  26. UserName = mySearchResult.GetDirectory
    Entry().Properties("DisplayFirstName").
    Value & " " & mySearchResult.GetDirectory
    Entry().Properties("DisplayLastName").Value  
  27. txtResult.Text += UserName & vbCrLf  
  28. End If  
  29. Catch ex As Exception  
  30. txtResult.Text += "* Login failed." & 
    vbCrLf & ex.Message  
  31. End Try  
  32. Else  
  33. txtResult.Text += "* Invalid user login name."  
  34. End If  
  35. Catch ex As Exception  
  36. txtResult.Text += "* Can not access the 
    LDAP server." & vbCrLf & ex.Message  
  37. End Try  
  38. End Sub 

这里要说明一下:

1、必须检验密码不能为空,否则会造成验证有误,即空密码能通过验证,不知道为什么。

2、LDAP://......这最前面的四个字母LDAP必须大写!否则报未知错误,不知道为什么,还得我走了一段弯路。

3、ldapserver.com需要替换成LDAP服务器的地址。

4、LDAP://......地址后面的参数,要根据你要访问的LDAP的设置而定。

5、如果密码不对,会引发异常,所以我在异常处理中捕获,但是不知道这样是否正确。

6、If mySearchResult Is Nothing Then 这句我觉得是废话,好像怎么也不会为True,如果密码不对,会引发异常的,但是不放心还是加上这句,可能是我的判断逻辑有问题。

总之,这段VB.NET验证LDAP用户身份的代码肯定不是最***的代码,但是确实是可以完成任务的代码,欢迎大家指正。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...