• VB.NET LDAP 用户身份验证


    前几天花了两天时间研究如何在.NET下验证LDAP的用户身份,看了一些java和vb的代码,碰了不少钉子,试验再试验,终于搞定,与大家分享...

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

    请看代码(部分敏感信息删节):

        Private Sub btnTest_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnTest.Click
            
    Dim LoginName As String = txtUser.Text
            
    Dim LoginPwd As String = txtPwd.Text
            
    If LoginPwd = "" Then
                txtResult.Text 
    = "* Password can not be blank."
                Exit Sub
            
    End If
            
    Dim myDirectorySearcher As DirectorySearcher
            
    Dim mySearchResult As SearchResult
            
    Dim myDirectoryEntry As DirectoryEntry
            
    Dim UserName As String
            txtResult.Text 
    = ""
            Try
                
    If myDirectoryEntry.Exists("LDAP://ldapserver.com/uid=" & LoginName & ",ou=people,ou=intranet,dc=yourdomainname,dc=com"Then
                    
    Try
                        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)
                        myDirectorySearcher 
    = New DirectorySearcher(myDirectoryEntry)
                        myDirectorySearcher.
    Filter = "(uid=" & txtUser.Text & ")"
                        myDirectorySearcher.PropertiesToLoad.Add("DisplayLastName")
                        myDirectorySearcher.PropertiesToLoad.Add(
    "DisplayFirstName")
                        mySearchResult 
    = myDirectorySearcher.FindOne
                        
    If mySearchResult Is Nothing Then
                            txtResult.Text 
    += "* Login failed."
                        Else
                            txtResult.Text 
    += ">>> Login passed!" & vbCrLf
                            UserName 
    = mySearchResult.GetDirectoryEntry().Properties("DisplayFirstName").Value & " " & mySearchResult.GetDirectoryEntry().Properties("DisplayLastName").Value
                            txtResult.Text 
    += UserName & vbCrLf
                            
                        
    End If
                    
    Catch ex As Exception
                        txtResult.Text 
    += "* Login failed." & vbCrLf & ex.Message
                    
    End Try
                
    Else
                    txtResult.Text 
    += "* Invalid user login name."
                End If
            
    Catch ex As Exception
                txtResult.Text 
    += "* Can not access the LDAP server." & vbCrLf & ex.Message
                
            
    End Try
        
    End Sub

    这里要说明一下:

    1、必须检验密码不能为空,否则会造成验证有误,即空密码能通过验证,不知道为什么。
    2、LDAP://......这最前面的四个字母LDAP必须大写!否则报未知错误,不知道为什么,还得我走了一段弯路。
    3、ldapserver.com需要替换成LDAP服务器的地址。
    4、LDAP://......地址后面的参数,要根据你要访问的LDAP的设置而定。
    5、如果密码不对,会引发异常,所以我在异常处理中捕获,但是不知道这样是否正确。
    6、If mySearchResult Is Nothing Then 这句我觉得是废话,好像怎么也不会为True,如果密码不对,会引发异常的,但是不放心还是加上这句,可能是我的判断逻辑有问题。

    总之,这段代码肯定不是最完美的代码,但是确实是可以完成任务的代码,欢迎大家指正。
    >>>>> 版权没有 >>>>> 欢迎转载 >>>>> 原文地址 >>>>> http://www.cnblogs.com/jlzhou >>>>> 雄鹰在鸡窝里长大,就会失去飞翔的本领,野狼在羊群里成长,也会爱上羊而丧失狼性。人生的奥妙就在于与人相处。生活的美好则在于送人玫瑰。和聪明的人在一起,你才会更加睿智。和优秀的人在一起,你才会出类拔萃。所以,你是谁并不重要,重要的是,你和谁在一起。
  • 相关阅读:
    绑定方法和非绑定方法
    property属性
    面向对象的三大特征之一:封装
    asp:GridView控件的使用
    javaWeb中struts开发——Logic标签
    javaWeb中struts开发——Bean标签
    大话数据结构(十二)java程序——KMP算法及改进的KMP算法实现
    大话数据结构(十一)java程序——串
    大话数据结构(七)——单链表的整表创建与删除
    大话数据结构(十)java程序——队列
  • 原文地址:https://www.cnblogs.com/jlzhou/p/181608.html
Copyright © 2020-2023  润新知