Question

J'essaie d'authentifier un utilisateur contre Active Directory à l'aide des types d'espace de noms de compte / assemblage dans mon application .NET 4 (VisualStudio 2010).Voici le code que j'ai:

private Boolean ValidateUser(String domainName, String userName, String password)
{
    var ou = String.Format(CultureInfo.InvariantCulture,
                           "LDAP://{0}.mydomain.com/dc={0},dc=mydomain,dc=com",
                           domainName);

    var domain = String.Format(CultureInfo.InvariantCulture,
                               "{0}.mydomain.com",
                               domainName);

    using (var context = new PrincipalContext(ContextType.Domain,
                                              domain,
                                              ou))
    {
        if (context.ValidateCredentials(userName, password))
        {
            var userPrincipal = UserPrincipal.FindByIdentity(context,
                                                             IdentityType.SamAccountName,
                                                             userName);

            return userPrincipal.IsMemberOf(context, IdentityType.Name, "GroupName");
        }

        return false;
    }
}

Le code fonctionne bien jusqu'à la déclaration où j'appelle la suite de la suite.Cet appel aborde l'exception suivante:

System.DirectoryServices.AccountManagement.PrincipalOperationException was caught
  Message=Unknown error (0x80005000)
  Source=System.DirectoryServices.AccountManagement
  ErrorCode=-2147463168
  StackTrace:
       at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()
       at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
       at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
       at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
       at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate)
       at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue)
       at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue)
       at Dominos.Pulse.Server.Security.DirectoryServices.ActiveDirectoryAuthenticationProvider.ValidateUser(String domainName, String userName, String password)
  InnerException: System.Runtime.InteropServices.COMException
       Message=Unknown error (0x80005000)
       Source=System.DirectoryServices
       ErrorCode=-2147463168
       StackTrace:
            at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
            at System.DirectoryServices.DirectoryEntry.Bind()
            at System.DirectoryServices.DirectoryEntry.get_SchemaEntry()
            at System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de)
            at System.DirectoryServices.AccountManagement.ADStoreCtx..ctor(DirectoryEntry ctxBase, Boolean ownCtxBase, String username, String password, ContextOptions options)
            at System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry entry)
            at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()
       InnerException: 

Clairement, j'ai quelque chose de mal configuré.Sinon, peut-être que je vais simplement en aller dans ce mauvais sens.

Mon objectif est de simplement authentifier l'utilisateur contre A / D, assurez-vous qu'ils sont membres d'un groupe spécifique (ou de groupes).Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Pouvez-vous essayer de dîner ou comme ceci:

var ou = String.Format(CultureInfo.InvariantCulture,
                      "dc={0},dc=mydomain,dc=com",
                      domainName);

Le contexte racine n'est tout simplement pas nécessaire de valider les informations d'identification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top