Programação da Web do Active Directory

3

O cenário:
Estou usando a autenticação integrada para conceder acesso a um site de intranet do ASP.net. Quando esse usuário acessa o site, certas informações são carregadas do perfil do diretório ativo e disponibilizadas para elas. Além disso, o site mantém certas informações sobre esse usuário para o aplicativo da Web que ele executa.

Qual é a melhor maneira de recuperar informações do Active Directory (estou usando o LDAP) e, além disso, vincular perfis de diretórios ativos aos perfis de aplicativos da Web. O aplicativo da Web está usando um banco de dados próprio, por isso não está armazenando nada no Active Directory.

Não sugira usar o nome de usuário, pois as alterações de nome podem ocorrer, estou tentando usar alguma forma de identificador exclusivo do Active Directory. O identificador exclusivo deve ser compatível com o banco de dados do SQL Server 2005.

    
por IceMage 18.11.2009 / 20:30

2 respostas

3

Não consulte o LDAP para seu domínio / ID de usuário e SID. Essas informações já foram extraídas do AD e estão disponíveis em seu token de segurança no ASP.NET.

Use o SID para vincular a um perfil no banco de dados local. Feito.

Aqui está um excelente recurso que você pode achar útil:

O Guia do Desenvolvedor .NET para a Programação de Serviços de Diretório por Joe Kaplan

link

    
por 18.11.2009 / 21:21
4

Existe uma propriedade para objetos de usuário (todos os objetos realmente) no diretório ativo chamado objectGUID. Você pode consultar isso a partir do diretório ativo e armazená-lo no banco de dados com o perfil do usuário. Ele é inteiramente exclusivo desse objeto de diretório ativo e não será alterado se o nome mudar.

EDITAR:

Amostra:

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
    
por 18.11.2009 / 20:32