identity与ASP.NET 模拟
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了identity与ASP.NET 模拟,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2140字,纯文字阅读大概需要4分钟。
内容图文
默认情况下,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进行设置
身份验证进去
设置特定的账户
在代码中开启
在代码中使用身份模拟更加灵活,可以在指定的代码段中使用身份模拟,在该代码段之外恢复使用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; publicconstint LOGON32_PROVIDER_DEFAULT = 0; WindowsImpersonationContext impersonationContext; [DllImport("advapi32.dll", CharSet=CharSet.Auto)] publicstaticexternint 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)] publicexternstaticint 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) returntrue; elsereturnfalse; } elsereturnfalse; }
以上代码试过了,鄙人尝试对某个文件设置权限,当前的windows用户可以读写,不知为何模拟管理员身份时则不可读写。体现在未开始模拟时System.IO.File.Exists返回true,而开了模拟之后就false。
原文:http://www.cnblogs.com/HopeGi/p/5851087.html
内容总结
以上是互联网集市为您收集整理的identity与ASP.NET 模拟全部内容,希望文章能够帮你解决identity与ASP.NET 模拟所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。