Asp Ldap authentication and redirection based on OU

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Genius79
    New Member
    • Oct 2009
    • 2

    Asp Ldap authentication and redirection based on OU

    Hi I'm trying to do an ASP authentication using Ldap and would like to have the users directed to pages based on the Organizational Unit. My ASP knowledge is pretty basic but would really like to get this sorted to complete the intranet.
    Thx I've found the following code on this website and manage to get the username and password authentication working just need to figure out how to redirect to the OU.

    Thanks
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    
    <html>
    <head>
    <title>Intranet</title>
    </head>
    
    <body>
    
    <%
    dim submit
    dim UserName
    dim Password
    
    
    UserName = "mydoamin/username"
    Password = ""
    Domain = "mydomain"
    submit = request.form("submit")
    
    if submit = "Authenticate" then
    UserName = request.form("UserName")
    Password = request.form("Password")
    Domain = request.form("Domain")
    result = AuthenticateUser(UserName, Password, Domain)
    if result then
    Response.Redirect("basic page")
    else
    response.write "<h3>Authentication Failed!</h3>"
    end if
    end if
    
    response.write "<hr><form method=post>"
    response.write "<table>"
    response.write "<tr>"
    response.write "<td><b>Username:&nbsp;</b></td><td><input type=""text"" name=""UserName"" value=""" & UserName & """>"
    response.write "</tr>"
    response.write "<tr>"
    response.write "<td><b>Password:&nbsp;</b></td><td><input type=""password"" name=""Password"" value=""" & Password & """ </td>"
    response.write "</tr>"
    response.write "<tr>"
    response.write "<td><b>AD Domain:&nbsp;</b></td><td><input type=""text"" name=""Domain"" value=""" & Domain & """ <br></td>"
    response.write "</tr>"
    response.write "<tr>"
    response.write "<td>&nbsp;</td><td><input name=""submit"" type=""submit"" value=""Authenticate""></td>"
    response.write "</tr>"
    response.write "</table>"
    response.write "</form>"
    response.end
    
    function AuthenticateUser(UserName, Password, Domain)
    dim strUser
    ' assume failure
    AuthenticateUser = false
    
    strUser = UserName
    strPassword = Password
    
    
    strQuery = "SELECT cn FROM 'LDAP://" & Domain & "' WHERE objectClass='*' "
    set oConn = server.CreateObject("ADODB.Connection")
    oConn.Provider = "ADsDSOOBJECT"
    oConn.Properties("User ID") = strUser
    oConn.Properties("Password") = strPassword
    oConn.Properties("Encrypt Password") = true
    oConn.open "DS Query", strUser, strPassword
    
    set cmd = server.CreateObject("ADODB.Command")
    set cmd.ActiveConnection = oConn
    cmd.CommandText = strQuery
    on error resume next
    set oRS = cmd.Execute
    if oRS.bof or oRS.eof then
    AuthenticateUser = false
    else
    AuthenticateUser = true
    end if
    set oRS = nothing
    set oConn = nothing
    
    end function
    
    %>
    
    </body>
    </html>
    Last edited by jhardman; Oct 28 '09, 07:20 PM. Reason: added code tags
  • jhardman
    Recognized Expert Specialist
    • Jan 2007
    • 3405

    #2
    OK, your query is only pulling up one field (cn) from LDAP. You will need to see what other fields are available (do "Select * ...", the * will pull up every field you have available) whether there is a field you can use. I've never tried it with LDAP, but this code should work:
    Code:
    response.write "<table><tr>" & vbNewLine
    dim x
    for each x in oRS.fields
       response.write "<td>" & x.name & "</td>" & vbNewLine
    next
    response.write "</tr><tr>" & vbNewLine
    do until oRS.eof
       for each x in oRS.fields
          response.write "<td>" & x.value & "</td>" & vbNewLine
       next
       response.write "</tr><tr>"
    
       oRS.movenext
    loop
    response.write "</tr></table>" & vbNewLine
    Let me know if this helps.

    Jared

    Comment

    • Genius79
      New Member
      • Oct 2009
      • 2

      #3
      Hey Jared
      Thanks for the assist. I've changed the "cn" to "*" and tried to pull the organizational Units from the Ldap but still no joy. I'm now seeing the following error when submitted " Error Type:
      ADODB.Connectio n (0x800A0CC1)
      Item cannot be found in the collection corresponding to the requested name or ordinal." in the highlighted line.



      Attaching modified code

      <%
      dim submit
      dim UserName
      dim Password



      UserName = ""
      Password = ""
      Domain = "mydomain"
      submit = request.form("s ubmit")

      if submit = "Authentica te" then
      UserName = request.form("U serName")
      Password = request.form("P assword")
      Domain = request.form("D omain")
      result = AuthenticateUse r(UserName, Password, Domain, strOU)
      if result then
      Response.Redire ct("http://localhost/intranet/"& strOU &".html")
      else
      response.write "<h3>Authentica tion Failed!</h3>"
      end if
      end if

      response.write "<hr><form method=post>"
      response.write "<table>"
      response.write "<tr>"
      response.write "<td><b>Usernam e:&nbsp;</b></td><td><input type=""text"" name=""UserName "" value=""" & UserName & """>"
      response.write "</tr>"
      response.write "<tr>"
      response.write "<td><b>Passwor d:&nbsp;</b></td><td><input type=""password "" name=""Password "" value=""" & Password & """ </td>"
      response.write "</tr>"
      response.write "<tr>"
      response.write "<td><b>AD Domain:&nbsp;</b></td><td><input type=""text"" name=""Domain"" value=""" & Domain & """ <br></td>"
      response.write "</tr>"
      response.write "<tr>"
      response.write "<td>&nbsp; </td><td><input name=""submit"" type=""submit"" value=""Authent icate""></td>"
      response.write "</tr>"
      response.write "</table>"
      response.write "</form>"
      response.end

      function AuthenticateUse r(UserName, Password, strOU, Domain)
      dim strUser
      ' assume failure
      AuthenticateUse r = false

      strUser = UserName
      strPassword = Password
      StrOU = OU


      strQuery = "SELECT * FROM 'LDAP://" & Domain & "' WHERE objectClass='*' "
      set oConn = server.CreateOb ject("ADODB.Con nection")
      oConn.Provider = "ADsDSOOBJE CT"
      oConn.Propertie s("User ID") = strUser
      oConn.Propertie s("Password") = strPassword
      oConn.Propertie s("Organization al Unit") = strOU
      oConn.Propertie s("Encrypt Password") = true
      oConn.open "DS Query", strUser, strPassword, strOU



      set cmd = server.CreateOb ject("ADODB.Com mand")
      set cmd.ActiveConne ction = oConn
      cmd.CommandText = strQuery
      on error resume next
      set oRS = cmd.Execute
      if oRS.bof or oRS.eof then
      AuthenticateUse r = false
      else
      AuthenticateUse r = true
      end if
      set oRS = nothing
      set oConn = nothing

      end function

      %>


      Maybe you can tell me where I've gone wrong.
      Thank for the help

      Comment

      • jhardman
        Recognized Expert Specialist
        • Jan 2007
        • 3405

        #4
        Originally posted by Genius79
        oConn.Propertie s("Organization al Unit") = strOU
        oConn.Propertie s("Encrypt Password") = true
        oConn.open "DS Query", strUser, strPassword, strOU
        The oconn properties are just putting things in the database connection string, definitely not the place to mention the organizational unit. Try this:
        Code:
        strQuery = "SELECT * FROM 'LDAP://" & Domain & "' WHERE objectClass='*' "
        set oConn = server.CreateObject("ADODB.Connection")
        oConn.Provider = "ADsDSOOBJECT"
        oConn.Properties("User ID") = strUser
        oConn.Properties("Password") = strPassword
        oConn.Properties("Encrypt Password") = true
        oConn.open 
        set oRS = server.createobject("adodb.recordset")
        oRS.open strQuery, oConn
        
        response.write "<table><tr>"
        for each x in oRS.fields
           response.write "<th>" & x.name & "</th>" & vbNewLine
        next
        response.write "</tr>"
        
        do until oRS.eof
           response.write "<tr>" & vbNewLine
        
           for each x in oRS.fields
              response.write "<td>" & x.value & "</td>" & vbNewLine
           next
        
           response.write "</tr>"
           oRS.movenext
        loop
        response.write "</table>"

        Comment

        Working...