Назад | Перейти на главную страницу

Веб-программирование Active Directory

Сценарий:
Я использую встроенную проверку подлинности для предоставления доступа к сайту интрасети ASP.net. Когда этот пользователь получает доступ к сайту, определенная информация загружается из его профиля активного каталога и становится доступной для него. Кроме того, на сайте хранится определенная информация об этом пользователе для веб-приложения, которое он запускает.

Каков наилучший способ получить информацию из Active Directory (я использую LDAP) и, кроме того, связать профили активного каталога с профилями веб-приложений. Веб-приложение использует собственную базу данных, поэтому ничего не хранит в Active Directory.

Не предлагайте использовать имя пользователя, так как изменения имени могут происходить и происходят, я пытаюсь использовать какую-либо форму уникального идентификатора из Active Directory. Уникальный идентификатор должен быть совместим с моей базой данных SQL Server 2005.

В активном каталоге есть свойство для пользовательских объектов (на самом деле всех объектов), называемого objectGUID. Вы можете запросить это из активного каталога и сохранить его в базе данных с профилем пользователя. Он полностью уникален для этого объекта активного каталога и не изменится при изменении имени.

РЕДАКТИРОВАТЬ:

Образец:

Private rootDE As New DirectoryEntry("LDAP://<YourDomainHere>")

Dim ds As New DirectorySearcher(Me.rootDE)
Dim sr As SearchResult

ds.Filter = "(samAccountName=<usernameHere>)"
sr = ds.FindOne()

Dim s As String = Me.GetGUIDString(CType(sr.Properties("objectGUID").Item(0), Byte()))

Dim de As New DirectoryEntry("LDAP://<GUID=" & s & ">")
MessageBox.Show(de.Name)


Private Function GetGUIDString(ByVal guid() As Byte) As String
    Dim index As Integer
    Dim result As New System.Text.StringBuilder(String.Empty)

    For index = 0 To (guid.Length - 1)
        result.AppendFormat("{0:x2}", guid(index))
    Next

    Return result.ToString()
End Function

Не запрашивайте у LDAP их домен / идентификатор пользователя и SID. Эта информация уже получена из AD и доступна в их маркере безопасности в ASP.NET.

Используйте SID для ссылки на профиль в локальной базе данных. Готово.

Вот отличный ресурс, который может вам пригодиться:

Руководство разработчика .NET по программированию служб каталогов, Джо Каплан

http://www.amazon.com/dp/0321350170