How to implement Window Authentication Functionality to a C# Desktop Application

1)  Get currently logged in user details:
We can achieve this by using the WindowsIdentity class of System.Security.Principal namespace. This class provides a static method, getCurrent(), which return a object of WindowsIdentity.

2) Validate windows credentials provided by user:(Ask User Name, Domain and Password from user)
This is little complex compared to above as we need to call a windows API using IntropServices. To accomplish this we need to add a extern function declaration, and then call the function. Following code will help you to understand this better.

[System.Runtime.InteropServices.DllImport("advapi32.dll")]
        public static extern bool LogonUser(string userName, string domainName, string password, int LogonType, int LogonProvider, ref IntPtr phToken);
        public Form1()
        {
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            bool issuccess = false;
            string username = GetloggedinUserName();

            if (username.ToLowerInvariant().Contains(txtUserName.Text.Trim().ToLowerInvariant()) && username.ToLowerInvariant().Contains(txtDomain.Text.Trim().ToLowerInvariant()))
            {
                issuccess = IsValidateCredentials(txtUserName.Text.Trim(), txtPwd.Text.Trim(), txtDomain.Text.Trim());
            }

            if (issuccess)
                MessageBox.Show("Successfuly Login !!!");
            else
                MessageBox.Show("User Name / Password / Domain is invalid !!!");
        }

        private string GetloggedinUserName()
        {
            System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent();
            return currentUser.Name;
        }

        private bool IsValidateCredentials(string userName, string password, string domain)
        {
            IntPtr tokenHandler = IntPtr.Zero;
            bool isValid = LogonUser(userName, domain, password, 2, 0, ref tokenHandler);
            return isValid;
        }

You can also download a sample code from below link:
http://code.msdn.microsoft.com/Add-Window-Authentication-833ba913#content

This entry was posted in General and tagged , , . Bookmark the permalink.

4 Responses to How to implement Window Authentication Functionality to a C# Desktop Application

  1. mexicali82 says:

    Gracias

  2. Smantha J. says:

    Wonderful and really helpful. Thanks
    Though one question here, is there anyway we can get the windows password of currently logged-in user?

  3. Brian says:

    Thank you for this, I just have one question. When I try to authenticate a user with a blank password it always returns False. Any way to correct that?

Leave a Reply to mexicali82 Cancel reply

Your email address will not be published. Required fields are marked *