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();
            }

        }
    }
  • 相关阅读:
    23、mybatis学习——mybatis的二级缓存
    22、mybatis学习——mybatis的一级缓存
    21、mybatis学习——mybatis动态sql之<sql>抽取sql语句
    20、mybatis学习——<bind>绑定
    19、mybatis学习——mybatis的动态sql之<foreach>遍历传入的数组,集合和map
    18、mybatis学习——mybatis的动态sql之通过{<set>和<if>结合}或者{<trim>和<if>的结合}实现部分字段更新
    17、mybatis学习——mybatis的动态sql之<choose><when><otherwise>选择唯一条件
    16、mybatis学习——mybatis的动态sql之<if>、<where>和<trim>
    15、mybatis学习——鉴别器discriminator的使用
    [20181108]with temp as 建立临时表吗.txt
  • 原文地址:https://www.cnblogs.com/zyip/p/2540393.html
Copyright © 2011-2022 走看看