在ASP.NET中使用WINDOWS身份假冒

原创 2004年06月22日 21:14:00

假冒用户的方法:
说明:在用ASP.NET时常因为安全问题而没有权限做某事,但有时我们又确实要使用到这些权限时,我们就应该给这些用户授予一些权限,而下面我们就来使用假冒来授予权限.

下面的是 IDEN.cs

using System;
using System.Web.Security;
using System.Security.Principal;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.IO;
using System.Text;

namespace com.todayisp.identity
{
 /// <summary>
 /// IDEN 的摘要说明。
 /// </summary>
 ///
 

 public class IDEN
 {
  public const int LOGON32_LOGON_INTERACTIVE = 2;
  public const int LOGON32_PROVIDER_DEFAULT = 0;
  public const string ComputerName="localhost";
  WindowsImpersonationContext impersonationContext;

  [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
  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);

  //登入假冒用户
  //CompName是该计算机的用户名,CompPassword是该用户的密码
  public bool ChangeRoleIN(string CompName,string CompPassword)
  {
   try
   {
    if(CompName == null) return false;
    if(CompPassword == null) return false;

    WindowsIdentity tempWindowsIdentity;
    IntPtr token = IntPtr.Zero;
    IntPtr tokenDuplicate = IntPtr.Zero;
    
    if(LogonUser(CompName,ComputerName,CompPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
    {
     if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
     {
      tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
      impersonationContext = tempWindowsIdentity.Impersonate();
      if (impersonationContext != null)
       return true;
      else
      {
       return false;
      }
     }
     else
     {
      return false;
     }
    }
    else
    {
     return false;
    }
   }
   catch
   {
    return false;
   }
   
  }

  //登出假冒用户
  public void ChangeRoleOUT()
  {
   try
   {
    impersonationContext.Undo();
   }
   catch{}
  }
 }
}


使用方法,下面的是ASP.NET文件 ChangeUser.aspx

<%@ Page language="c#" AutoEventWireup="false"%>
<%@ Import Namespace= "com.todayisp.identity"%>//记得使用该命名空间
<%
string UserName = Request.Params["UserName"];
string Password = Request.Params["Password"];
if (UserName == null && Password == null)
{
 Response.Write("error:用户名和密码为空.");
 return;
}

//假冒身份开始
  IDEN Identity = new IDEN();
  bool In = Identity.ChangeRoleIN(UserName,PasswordKey);
  if (!In){
   Response.Write("error:变更用户权限失败");
   return;

//假冒身份结束
  Identity.ChangeRoleOUT();

%>

asp.net 域名欺骗式开发

今天大水很猛,两大巨头又重现江湖,首页瞬时风生水起,在这临行出差之际,草草来篇,沉淀在潮水之下。   前言:如果觉得本文对你有帮助,就热情点下推荐   一:用VS的IDE自带的IIS开发 ...
  • cyq1162
  • cyq1162
  • 2016年11月23日 12:08
  • 153

asp.net连接数据库 windows身份验证模式

asp.net连接数据库 windows身份验证模式
  • hoho_12
  • hoho_12
  • 2016年06月14日 20:17
  • 1410

将集成Windows认证并使用了身份模拟的ASP.net应用改成Form认证

先在Web.config里设置成Form认证:                        当然还得使用Session: 以及配置站点/虚拟目录为匿名认证 然后是一个身份模拟的辅助类:public ...
  • cnlike
  • cnlike
  • 2007年06月29日 14:41
  • 1305

ASP.NET身份验证——Windows身份认证

细说ASP.NET Windows身份认证 阅读目录 开始认识ASP.NET Windows身份认证访问 Active Directory在ASP.NET中访问Active Direct...
  • likingsn
  • likingsn
  • 2015年11月03日 11:08
  • 2040

ASP.NET实现身份模拟

使用模拟时,ASP.NET 应用程序可以选择以这些应用程序当前正为之操作的客户的身份执行。通常这样做的原因是为了避免在 ASP.NET 应用程序代码中处理身份验证和授权问题。而您依赖于 Microso...
  • 21aspnet
  • 21aspnet
  • 2007年03月21日 20:38
  • 2179

SQL Server中服务器身份验证及用户登录

安装过程中,SQL Server 数据库引擎设置为“Windows 身份验证模式”或“SQL Server 和 Windows 身份验证模式”。 安装完成后,您可以随时更改身份验证模式。 如果在...
  • tanzhangwen
  • tanzhangwen
  • 2015年02月13日 14:57
  • 1751

关于ASP.NET MVC中Form Authentication与Windows Authentication的简单理解

一般互联网应用,如人人网,微博,都是需要用户登录的,如果用户不登陆,就不能使用此网站。所以,这里都是用FormAuthentication,要求用户填写用户名与密码,然后登录成功后,FormAuthe...
  • sundacheng1989
  • sundacheng1989
  • 2013年08月14日 15:45
  • 3758

C#(ASP.NET)中连接数据库的字符串(连接Access和sqlserver数据库以及用windows和身份验证两种方式)

1.c#本地MDB数据库连接(数据库在该项目的Bin——>Debug——>DB文件夹下)  OleDbConnection conn = new OleDbConnection("Provider=...
  • wjr_loves
  • wjr_loves
  • 2011年05月24日 17:30
  • 8967

ASP.NET中如何正确使用Session

Asp.Net中的Session要比Asp中的Session灵活和强大很多,同时也复杂很多;看到有一些Asp.Net开发人员报怨说Session不稳定,莫名其妙的丢失,其实这正是Asp.Net改进的地...
  • Bens2014
  • Bens2014
  • 2014年06月01日 21:06
  • 839

win7下如何用管理员身份运行cmd

win7下要想以管理员身份运行cmd,可以找到cmd,点右键选择“以管理员身份运行”,要想每次都以管理员身份运行,解决方法:   1. 点击开始菜单; 在搜索框中输入“cmd”,将会在返回的搜索结...
  • xiaolei05
  • xiaolei05
  • 2013年12月07日 17:11
  • 2837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP.NET中使用WINDOWS身份假冒
举报原因:
原因补充:

(最多只允许输入30个字)