星空网 > 软件开发 > ASP.net

identity与ASP.NET 模拟

默认情况下,ASP.NET应用程序以本机的ASPNET帐号运行,该帐号属于普通用户组,权限受到一定的限制,以保障ASP.NET应用程序运行的安全。但是有时需要某个ASP.NET应用程序或者程序中的某段代码执行需要特定权限的操作,比如某个文件的存取,这时就需要给该程序或相应的某段代码赋予某个帐号的权限以执行该操作,这种方法称之为身份模拟(Impersonation)。

也就是说如果当前IIS的用户在Windows系统中进行某些操作时权限不足,除了可以对IIS用户设置更高的权限外,还可以进行身份模拟,使当前IIS用户具有某个用户的权限。默认情况下模拟的帐户是 IIS APPPOOL\DefaultAppPool,当然可以进行额外的设置。

通过配置文件

<identity impersonate="true" />

若指定模拟某个用户,则设置userName和password的属性值

<identity impersonate="true" password="" userName="" />

另外也可以通过IIS进行设置

identity与ASP.NET 模拟

身份验证进去

identity与ASP.NET 模拟

设置特定的账户

identity与ASP.NET 模拟

   

在代码中开启

在代码中使用身份模拟更加灵活,可以在指定的代码段中使用身份模拟,在该代码段之外恢复使用ASPNET本机帐号。该方法要求必须使用Windows的认证身份标识。

System.Security.Principal.WindowsImpersonationContext impersonationContext;impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();//Insert your code that runs under the security context of the authenticating user here.impersonationContext.Undo();

上例中,需要使用Windows身份验证,否则User.Identity不是WindowsIdentity,强制转换会失败然后报错

   

模拟指定账户

 

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

 

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, 2, ref tokenDuplicate) != 0)    {     tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);     impersonationContext = tempWindowsIdentity.Impersonate();     if (impersonationContext != null)      return true;     else      return false;    }   else     return false;  } 

 

以上代码试过了,鄙人尝试对某个文件设置权限,当前的windows用户可以读写,不知为何模拟管理员身份时则不可读写。体现在未开始模拟时System.IO.File.Exists返回true,而开了模拟之后就false。




原标题:identity与ASP.NET 模拟

关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Kilimall 2021年活动日历大公开!:https://www.ikjzd.com/articles/137843
注意!美国青少年最喜欢的社交媒体:https://www.ikjzd.com/articles/137844
什么是跨境电商独立站???:https://www.ikjzd.com/articles/137845
让你的产品脱颖而出的10种Facebook营销方式!(二):https://www.ikjzd.com/articles/137846
兰浪:登上国际时装周的高端安防手套:https://www.ikjzd.com/articles/137847
Gojek宣布投资印尼科技银行Bank Jago:https://www.ikjzd.com/articles/137848
​TikTok发生了什么?美区增长首次停滞,准入管理力度加大:https://www.kjdsnews.com/a/1836407.html
2024年如何找到在TikTok上发帖的最佳时间:https://www.kjdsnews.com/a/1836408.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流