Active Directory Web 编程

Active Directory Web 编程

场景:
我使用集成身份验证授予对 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)

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

答案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

相关内容