UserPrincipal.FindByIdentity () sempre retorna nulo
Estou usando o LdapAuthentication para registrar um usuário no Active Directory. Quero encontrar todos os grupos aos quais o usuário pertence. Estou usando o seguinte código:
string adPath = "LDAP://OU=HR Controlled Users,OU=All Users,DC=myDomain,DC=local";
LdapAuthentication adAuth = new LdapAuthentication(adPath);
try
{
if (true == adAuth.IsAuthenticated("myDomain", txtLoginEmail.Text, txtLoginPassword.Text))
{
string email = txtLoginEmail.Text;
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.Name, email);
foreach (var group in user.GetGroups())
{
Console.WriteLine(group.Name);
}
}
}
}
catch(Exception e) { /* Handle Error */ }
Meu problema é que, quando ligo para UserPrincipal.FindByIdentity (), sempre obtenho um valor nulo, mesmo que a autenticação do usuário funcione conforme o esperado.
Por que isso está acontecendo? Existe algum problema com o código ou com minha abordagem? Isso está sendo executado dentro de um aplicativo ASP.NET 4.0 WebForms.
Atualizar:
Aparentemente, eu tenho usado o IdentityType (cn) errado. Fiz o check-in da depuração e o nome da conta é "UsuárioA".
Então, tentei usar o seguinte código manualmente:
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.Name, "UserA");
Mas ainda assim eu fico nulo.
Atualização 2 (resolvida):
A questão foi dupla. Eu precisava especificar o nome do meu controlador de domínio ao declarar oPrincipalContext
.
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "myDomain"))
{
// code here...
}
Então, ao procurar oUserPrincipal
Eu estava usando o erradoIdentityType
; Eu estava pesquisando comIdentityType.Name
- qual é o nome da conta - em vez deIdentityType.SamAccountName
- qual é o nome de usuário.
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, email);
Problema resolvido.