Qual campo usar ao autenticar no Active Directory?

10

Os objetos de usuário do Active Directory incluem vários campos que podem ser considerados um identificador. A seguir listamos alguns deles com seus rótulos no ADUC e seu nome de atributo:

  • Nome completo - cn
  • - nome
  • Logon do usuário sAMAccountName - sAMAccountName
  • Logon de UPN do usuário: userPrincipalName
  • - distinguishedName

Estou tentando fazer com que nossos desenvolvedores padronizem o uso de apenas um deles ao escrever um código personalizado que seja autenticado contra o AD - o problema é que não tenho certeza de qual é o código "correto" ou se são diferentes um em diferentes circunstâncias. Eu nem tenho certeza se algum dos campos acima deve ser usado!

Alguém mais escolheu um para usar consistanly e o que o influenciou nessa decisão? Qualquer documentação que esclarece o problema?

    
por dunxd 16.01.2014 / 18:02

3 respostas

15

Um CN (nome comum) não é bom para efetuar login, porque um CN sozinho não identifica exclusivamente um usuário. Eu poderia ter um

CN=Ryan Ries,OU=Dallas,DC=Domain,DC=com

e eu também poderia ter um

CN=Ryan Ries,OU=New York,DC=Domain,DC=com

O CN de um usuário também é um RDN (nome distinto relativo). Eles têm o mesmo CN, mas DNs diferentes. Você pode perceber que terá problemas se tiver duas pessoas em sua organização denominadas Ryan Ries e terá que fazer o SamAccountName para o segundo algo como rries2 .

Um DN (nome diferenciado) não é bom para efetuar login, porque quem deseja efetuar login em um sistema com um nome de usuário como CN=ryan,OU=Texas,DC=brazzers,DC=com ? Embora o uso de um DN seja exclusivo e definitivamente identifique um usuário, é chato ter que digitar. É o mesmo tipo de conceito entre caminhos relativos e caminhos absolutos em um sistema de arquivos. Isso também significa que você sabe exatamente onde, na estrutura de diretório, o objeto está localizado, sem ter que procurá-lo. O que você muitas vezes não faz.

Isso é chamado ANR (resolução de nomes ambíguos) - pesquisando o diretório de um usuário quando você não tem o nome distinto dele.

UPN (nome principal do usuário) é muito bom porque se parece com endereços de e-mail, eles podem ser o mesmo que o endereço de e-mail corporativo do usuário, são fáceis de lembrar e preferem fazer login porque o nome será ser procurado primeiro no domínio local, antes de procurá-lo na floresta.

Microsoft says: The point of the UPN is to consolidate the email and logon namespaces so that the user need only remember a single name. The UPN is the preferred logon name for Windows users. Users should be using their UPNs to log on to the domain. At logon time, a UPN is validated first by searching the local domain, then the global catalog. Failure to find the UPN in the local domain or the GC results in rejection of the UPN. The UPN can be assigned, but is not required, when the user account is created.

Tenha em mente que "não é obrigatório" no final ao projetar seus aplicativos.

SamAccountName também é bom porque SamAccountName precisa ser exclusivo para todos no domínio (mas não na floresta). Além disso, SamAccountNames são curtos. A maioria das pessoas efetua login com SamAccountNames, embora elas não o identifiquem exclusivamente em uma floresta do AD, e é por isso que você precisa especificar um nome de domínio para acompanhar seu SamAccountName para que o sistema saiba em qual domínio você está tentando efetuar login. .

Veja uma ótima documentação sobre o assunto para ler mais:

link

link

    
por 16.01.2014 / 18:30
4

Se você estiver se referindo ao nome de usuário como algo que alguém digitaria para efetuar login, eu recomendaria sAMAccountName , que seria exclusivo em combinação com um nome de domínio, ou userPrincipalName , que seria exclusivo em uma floresta.

No que diz respeito ao nome de usuário como identificador exclusivo, o Windows usa o SID para todas as entradas de controle de acesso e fornece um conjunto completo de métodos para traduzir para SIDs de nomes de usuário. Os SIDs correspondem à metáfora do usuário para o tempo de vida de uma conta, pois as renomeações e movimentações em um domínio não têm efeito, mas a exclusão e a recriação resultam em um novo SID.

Para esse fim, eu ligaria para LookupAccountName , que recebe uma string representando o nome de usuário, e retorna o sAMAccountName , o SID e o nome de domínio do domínio em que o usuário foi encontrado.

O usuário pode usar qualquer sintaxe suportada pelo Windows para efetuar login e nenhum treinamento adicional é necessário.

    
por 16.01.2014 / 18:42
0

Eu recomendaria que o usuário escolha o formato do nome que deseja usar e determine a entrada do usuário no lado do aplicativo. por exemplo: Se o usuário digitar: [email protected], considere-o como UPN e procure por UPN no AD. Se o usuário digitar: username - considere-o como samAccountName para um domínio padrão predefinido e, claro, se o usuário digitar domain \ username, considere-o como samAccountName no domínio especificado. Sempre recupere o SID do usuário e atribua todas as permissões ao SID porque as pessoas se casam e o nome de usuário pode mudar.

    
por 25.09.2017 / 15:27