Сценарий:
Я использую встроенную проверку подлинности для предоставления доступа к сайту интрасети 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 по программированию служб каталогов, Джо Каплан