How to validate domain credentials? How to validate domain credentials? windows windows

How to validate domain credentials?


C# in .NET 3.5 using System.DirectoryServices.AccountManagement.

 bool valid = false; using (PrincipalContext context = new PrincipalContext(ContextType.Domain)) {     valid = context.ValidateCredentials( username, password ); }

This will validate against the current domain. Check out the parameterized PrincipalContext constructor for other options.


using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Security;using System.DirectoryServices.AccountManagement;public struct Credentials{    public string Username;    public string Password;}public class Domain_Authentication{    public Credentials Credentials;    public string Domain;    public Domain_Authentication(string Username, string Password, string SDomain)    {        Credentials.Username = Username;        Credentials.Password = Password;        Domain = SDomain;    }    public bool IsValid()    {        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Domain))        {            // validate the credentials            return pc.ValidateCredentials(Credentials.Username, Credentials.Password);        }    }}


I`m using the following code to validate credentials.The method shown below will confirm if the credentials are correct and if not wether the password is expired or needs change.

I`ve been looking for something like this for ages... So i hope this helps someone!

using System;using System.DirectoryServices;using System.DirectoryServices.AccountManagement;using System.Runtime.InteropServices;namespace User{    public static class UserValidation    {        [DllImport("advapi32.dll", SetLastError = true)]        static extern bool LogonUser(string principal, string authority, string password, LogonTypes logonType, LogonProviders logonProvider, out IntPtr token);        [DllImport("kernel32.dll", SetLastError = true)]        static extern bool CloseHandle(IntPtr handle);        enum LogonProviders : uint        {            Default = 0, // default for platform (use this!)            WinNT35,     // sends smoke signals to authority            WinNT40,     // uses NTLM            WinNT50      // negotiates Kerb or NTLM        }        enum LogonTypes : uint        {            Interactive = 2,            Network = 3,            Batch = 4,            Service = 5,            Unlock = 7,            NetworkCleartext = 8,            NewCredentials = 9        }        public  const int ERROR_PASSWORD_MUST_CHANGE = 1907;        public  const int ERROR_LOGON_FAILURE = 1326;        public  const int ERROR_ACCOUNT_RESTRICTION = 1327;        public  const int ERROR_ACCOUNT_DISABLED = 1331;        public  const int ERROR_INVALID_LOGON_HOURS = 1328;        public  const int ERROR_NO_LOGON_SERVERS = 1311;        public  const int ERROR_INVALID_WORKSTATION = 1329;        public  const int ERROR_ACCOUNT_LOCKED_OUT = 1909;      //It gives this error if the account is locked, REGARDLESS OF WHETHER VALID CREDENTIALS WERE PROVIDED!!!        public  const int ERROR_ACCOUNT_EXPIRED = 1793;        public  const int ERROR_PASSWORD_EXPIRED = 1330;        public static int CheckUserLogon(string username, string password, string domain_fqdn)        {            int errorCode = 0;            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain_fqdn, "ADMIN_USER", "PASSWORD"))            {                if (!pc.ValidateCredentials(username, password))                {                    IntPtr token = new IntPtr();                    try                    {                        if (!LogonUser(username, domain_fqdn, password, LogonTypes.Network, LogonProviders.Default, out token))                        {                            errorCode = Marshal.GetLastWin32Error();                        }                    }                    catch (Exception)                    {                        throw;                    }                    finally                    {                        CloseHandle(token);                    }                }            }            return errorCode;        }    }