场景:
我使用集成身份验证授予对 ASP.net 内联网站点的访问权限。当该用户访问该站点时,会从其 Active Directory 配置文件中加载某些信息并将其提供给他们。此外,该站点还会为其运行的 Web 应用程序维护有关该用户的某些信息。
从 Active Directory 检索信息(我使用 LDAP),然后将 Active Directory 配置文件链接到 Web 应用程序配置文件的最佳方法是什么。Web 应用程序使用自己的数据库,因此它不会在 Active Directory 中存储任何内容。
不建议使用用户名,因为名称可能会发生变化,我正在尝试使用 Active Directory 中的某种形式的唯一标识符。唯一标识符必须与我的 SQL Server 2005 数据库兼容。
答案1
不要向 LDAP 查询其域/用户 ID 和 SID。该信息已从 AD 中提取,并可在 ASP.NET 中的安全令牌中找到。
使用 SID 链接到本地数据库中的配置文件。完成。
这是一个你可能会觉得有用的优秀资源:
.NET 开发人员的目录服务编程指南(作者:Joe Kaplan)
答案2
Active Directory 中有一个用户对象(实际上是所有对象)的属性,称为 objectGUID。您可以从 Active Directory 中查询此属性,并将其与用户配置文件一起存储在数据库中。它对于该 Active Directory 对象而言是完全唯一的,并且如果名称发生变化,它也不会改变。
编辑:
样本:
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