zoukankan      html  css  js  c++  java
  • 验证域用户名密码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    using System.Runtime.InteropServices;   //必要引用
    using System.Security.Principal;    //必要引用

    public partial class trad_in_user_login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UserLoginForDomainDAO u = new UserLoginForDomainDAO();
            var f = u.impersonateValidUser("yzhao""abc.com""123456");
            Response.Write(f.ToString());        
        }


        internal class UserLoginForDomainDAO
        {
            public const int LOGON32_LOGON_INTERACTIVE = 2;
            public const int LOGON32_PROVIDER_DEFAULT = 0;

            WindowsImpersonationContext impersonationContext;

            [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
            public static extern int LogonUser(String lpszUserName,
                                              String lpszDomain,
                                              String lpszPassword,
                                              int dwLogonType,
                                              int dwLogonProvider,
                                              ref IntPtr phToken);
            [DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
            public extern static int DuplicateToken(IntPtr hToken,
                                              int impersonationLevel,
                                              ref IntPtr hNewToken);
            /**/
            /// <summary>
            
    /// 输入用户名、密码、登录域判断是否成功
            
    /// </summary>
            
    /// <example>
            
    /// if (impersonateValidUser(UserName, Domain, Password)){}
            
    /// </example>
            
    /// <param name="userName">账户名称,如:string UserName = UserNameTextBox.Text;</param>
            
    /// <param name="domain">要登录的域,如:string Domain   = DomainTextBox.Text;</param>
            
    /// <param name="password">账户密码, 如:string Password = PasswordTextBox.Text;</param>
            
    /// <returns>成功返回true,否则返回false</returns>
            public bool impersonateValidUser(String userName, String domain, String password)
            {
                WindowsIdentity tempWindowsIdentity;
                IntPtr token = IntPtr.Zero;
                IntPtr tokenDuplicate = IntPtr.Zero;

                if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
                LOGON32_PROVIDER_DEFAULT, ref token) != 0)
                {
                    if (DuplicateToken(token, 2ref tokenDuplicate) != 0)
                    {
                        tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                        impersonationContext = tempWindowsIdentity.Impersonate();
                        if (impersonationContext != null)
                            return true;
                        else
                            return false;
                    }
                    else
                        return false;
                }
                else
                    return false;
            }

            public void undoImpersonation()
            {
                impersonationContext.Undo();
            }

        }
    }
  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/zyip/p/2540393.html
Copyright © 2011-2022 走看看