Jak přistupovat do Active Directory přes ASP.NET I. – Překlad loginu na jméno a příjmení

Pokud programujete webové aplikace, které pracují v intranetovém prostředí, pak jste se jistě setkali s Active Directory (AD). V podstatě celý systém Microsoftu je postaven na AD. V tomto článku si ukážeme, jak přistupovat do AD pomocí .NET a získat nějaké informace, např. pro prezentaci na webu. Toto může být užitečné, pokud nám nepostačují nástroje Microsoftu. V tomto prvním příkladě si ukážeme, jak jednoduše lze přeložit login v doméně na lidský tvar „Příjmení Jméno“.

Pro tento příklad potřebujeme importovat Namespace DirectoryServices

Imports System.DirectoryServices

Ve Visual Studiu je to klepnutím na References > Add reference > .NET > System.DirectoryServices.dll

\'Překlad loginu na tvar "Prijmeni Jmeno"
Function ConvertSAMToName(ByVal SAMAccountName As String) As String

  \'očistíme samaccountname o doménu
  SAMAccountName = Replace(SAMAccountName.ToLower, "domenaxxx\\", "")

  \'přihlašovací údaje pro přístup do AD, pokud neni povolen anonymní přístup
  Dim Username As String = "DOMENAXXX\\username"
  Dim Password As String = "password"
  Dim Path As String = "LDAP://subdom.domenaXXX.cz:3268/DC=domenaXXX,DC=cz"
  \'nacitani pres global catalog (GC)je o poznání rychlejší
  \'s velkou pravděpodobností budete mít GC na portu 3268
  \'jinak můžete přistupovat přímo do domeny
  \'LDAP://domenaXXX.cz/DC=domenaXXX,DC=cz"

  Try

    Dim entry As New DirectoryEntry(Path, Username, Password)
    Dim search As New DirectorySearcher(entry)
    \'zde se nastavuje filtr a vlastnosti, ktere z AD chceme
    search.Filter = "(samaccountname=" & SAMAccountName & ")"
    search.PropertiesToLoad.Add("sn")
    search.PropertiesToLoad.Add("givenName")

    Dim result As SearchResult = search.FindOne()
    Dim key As String

    For Each key In result.Properties.PropertyNames

      \' kazda property muze obsahovat krome sebe take kolekci více hodnot
      Dim propValue As Object
      For Each propValue In result.Properties(key)

        \'a tady už jen použijeme hodnoty z AD 
        If key = "sn" Then
          ConvertSAMToName = Trim(propValue & " " & ConvertSAMToName)
        End If
        If key = "givenname" Then
          ConvertSAMToName = Trim(ConvertSAMToName & " " & propValue)
        End If

      Next

    Next key

  Catch ex As Exception

    Return SAMAccountName

  End Try

End Function