深入剖析VB.NET验证LDAP用户身份

开发 后端
当我们想在程序代码中实现VB.NET验证LDAP用户身份的时候,可以通过以下介绍的内容来逐步的完成。在这里就为大家详细介绍一下。

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用户身份的代码肯定不是最***的代码,但是确实是可以完成任务的代码,欢迎大家指正。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-10-28 10:15:48

VB.NET框架类库

2009-10-12 16:51:28

VB.NET使用Ora

2009-10-21 16:00:26

VB.NET CASE

2009-10-23 13:14:38

2009-10-13 15:09:19

VB.NET使用Tre

2009-11-02 16:22:16

VB.NET面向对象

2010-01-08 16:10:05

VB.NET读写文本文

2010-01-08 10:21:38

VB.NET Cont

2009-10-29 10:45:01

VB.NET设置控件

2009-10-21 10:05:30

VB.NET运行环境

2010-01-12 15:21:48

VB.NET权限控制

2009-10-29 11:41:27

VB.NET写Obje

2010-01-21 12:55:08

VB.NET对象序列

2010-01-12 11:47:09

VB.NET可选参数

2009-10-15 17:50:48

VB.NET调用API

2010-01-14 14:21:07

2010-01-22 15:37:02

VB.NET监控类

2009-10-26 12:39:09

VB.NET通信程序

2010-01-15 18:56:58

VB.NET Fiel

2009-10-30 16:31:55

VB.NET重载方法
点赞
收藏

51CTO技术栈公众号