Šiuo metu esate neprisijungę, laukiama, kol iš naujo prisijungsite prie interneto

Jūsų naršyklė nepalaikoma

Kad galėtumėte naudotis svetaine, turite atnaujinti naršyklę.

Įdiekite naujausią „Internet Explorer“ versiją

Kaip įgyvendinti apsimetimo ASP.NET programai

SVARBU: šis straipsnis išverstas naudojant „Microsoft“ mašininio vertimo programinę įrangą ir gali būti pataisytas naudojant „Community Translation Framework“ (CTF) technologiją. „Microsoft“ siūlo mašinos išverstus ir po to bendruomenės suredaguotus straipsnius, taip pat žmogaus išverstus straipsnius siekdama suteikti prieigą prie visų savo žinių bazės straipsnių daugeliu kalbų. Mašinos išverstuose ir vėliau paredaguotuose straipsniuose gali būti žodyno, sintaksės ir / arba gramatikos klaidų. „Microsoft“ neatsako už jokius netikslumus, klaidas arba žalą, patirtą dėl neteisingo turinio vertimo arba mūsų klientų naudojimosi juo. Daugiau apie CTF žr. http://support.microsoft.com/gp/machine-translation-corrections.

Spustelėkite čia, norėdami pamatyti šio straipsnio versiją anglų kalba: 306158
Šiame straipsnyje nurodytas šių Microsoft .NET Pagrindų klasės biblioteka vardų:
  • System.Web.Security
  • System.Security.Principal
  • System.Runtime.InteropServices
Santrauka
Šiame straipsnyje aprašoma įvairių būdų, kaip įgyvendinti Apsimetinėjimas – ASP.NET programai.
Daugiau informacijos
Jei jūs norite apsimesti ASP.NET, gijos vartotojo galite naudoti vieną iš šių metodų, pagal jūsų reikalavimus:
Pastaba Jūs galite naudoti šį kodą nustatyti kas viskas gija vykdo kaip:
System.Security.Principal.WindowsIdentity.GetCurrent().Name				

Apsimesti patvirtintas IIS paskyrą ar vartotojo

Apsimesti Microsoft interneto informacijos paslaugose (IIS) autentifikavimo vartotojo apie kiekvieną prašymą dėl kiekvieno puslapio dalyje ASP.NET programai, turite įtraukti yra <identity></identity> žymelę Web.config faile šios taikomosios programos ir nustatykite atributą apsimestiTrue. Pvz.:
<identity impersonate="true" />				
grįžti į viršų

Apsimesti konkrečiam vartotojui visus prašymus, ASP.NET programai

Apsimesti konkrečiam vartotojui visus prašymus visuose puslapiuose iš ASP.NET programai, galite nurodyti vartotojo vardą ir slaptažodį atributų, <identity></identity> žyma, kad taikyti, faile Web.config. Pvz.:
<identity impersonate="true" userName="accountname" password="password" />				
Pastaba Procesą, kuris impersonates konkrečiam vartotojui dėl tapatybės siūlai turi turėti "Veikia kaip operacinės sistemos dalis" privilegija. Iš numatyta, Aspnet_wp.exe procesas veikia pagal kompiuterio abonemento pavadinimą ASPNET. Tačiau šis abonementas neturi reikiamų teisių apsimesti, konkrečiam vartotojui. Gaunate klaidos pranešimą bandydami apsimesti, konkrečiam vartotojui. Ši informacija taikoma tik .NET pagrindų 1,0. Tai teisė nėra būtinas .NET sistemos 1.1.

Norėdami išspręsti šią problemą, naudokite vieną iš šių metodų:
  • Suteikti "Veikia kaip operacinės sistemos dalis" privilegija į ASPNET sąskaitą (skurd iausiomis kategorijomis, sąskaita).

    Pastaba Norėdami išspręsti šią problemą, galite naudoti šį metodą Microsoft nerekomenduoja šis metodas.
  • Pakeiskite paskyrą, Aspnet_wp.exe procesas prasideda pagal sistemą sudaro <processModel>konfigūracijos skyriuje Machine.config failo.</processModel>
grįžti į viršų

Apsimesti autentifikavimo vartotojo kodas

Apsimesti autentifikavimo vartotojo (User.Identity) tik paleidus kad konkreti sekcija kodas, jūs galite naudoti su kodas laikytis. Šis metodas reikalauja, kad autentifikavimo vartotojo tapatybę tipo WindowsIdentity.

Visual Basic .NET
Dim impersonationContext As System.Security.Principal.WindowsImpersonationContextDim currentWindowsIdentity As System.Security.Principal.WindowsIdentitycurrentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)impersonationContext = currentWindowsIdentity.Impersonate()'Insert your code that runs under the security context of the authenticating user here.impersonationContext.Undo()				
Visual C# .NET
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();				
Visual J# .NET
System.Security.Principal.WindowsImpersonationContext impersonationContext;impersonationContext =     ((System.Security.Principal.WindowsIdentity)get_User().get_Identity()).Impersonate();//Insert your code that runs under the security context of the authenticating user here.impersonationContext.Undo();				
grįžti į viršų

Apsimesti konkrečiam vartotojui kodas

Apsimesti konkrečiam vartotojui tik tada, kai jums paleisti tam tikrą skyrius, kodas, naudokite šį kodą:

Visual Basic .NET
<%@ Page Language="VB" %><%@ Import Namespace = "System.Web" %><%@ Import Namespace = "System.Web.Security" %><%@ Import Namespace = "System.Security.Principal" %><%@ Import Namespace = "System.Runtime.InteropServices" %><script runat=server>Dim LOGON32_LOGON_INTERACTIVE As Integer = 2Dim LOGON32_PROVIDER_DEFAULT As Integer = 0Dim impersonationContext As WindowsImpersonationContextDeclare Function LogonUserA Lib "advapi32.dll" (ByVal lpszUsername As String, _                        ByVal lpszDomain As String, _                        ByVal lpszPassword As String, _                        ByVal dwLogonType As Integer, _                        ByVal dwLogonProvider As Integer, _                        ByRef phToken As IntPtr) As IntegerDeclare Auto Function DuplicateToken Lib "advapi32.dll" ( _                        ByVal ExistingTokenHandle As IntPtr, _                        ByVal ImpersonationLevel As Integer, _                        ByRef DuplicateTokenHandle As IntPtr) As IntegerDeclare Auto Function RevertToSelf Lib "advapi32.dll" () As LongDeclare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As LongPublic Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)    If impersonateValidUser("username", "domain", "password") Then        'Insert your code that runs under the security context of a specific user here.        undoImpersonation()    Else        'Your impersonation failed. Therefore, include a fail-safe mechanism here.    End IfEnd SubPrivate Function impersonateValidUser(ByVal userName As String, _ByVal domain As String, ByVal password As String) As Boolean    Dim tempWindowsIdentity As WindowsIdentity    Dim token As IntPtr = IntPtr.Zero    Dim tokenDuplicate As IntPtr = IntPtr.Zero    impersonateValidUser = False    If RevertToSelf() Then        If LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,                      LOGON32_PROVIDER_DEFAULT, token) <> 0 Then            If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then                tempWindowsIdentity = New WindowsIdentity(tokenDuplicate)                impersonationContext = tempWindowsIdentity.Impersonate()                If Not impersonationContext Is Nothing Then                    impersonateValidUser = True                End If            End If        End If    End If    If Not tokenDuplicate.Equals(IntPtr.Zero) Then        CloseHandle(tokenDuplicate)    End If    If Not token.Equals(IntPtr.Zero) Then        CloseHandle(token)    End IfEnd FunctionPrivate Sub undoImpersonation()    impersonationContext.Undo()End Sub</script>
Visual C# .NET
<%@ Page Language="C#"%><%@ Import Namespace = "System.Web" %><%@ Import Namespace = "System.Web.Security" %><%@ Import Namespace = "System.Security.Principal" %><%@ Import Namespace = "System.Runtime.InteropServices" %><script runat=server>public const int LOGON32_LOGON_INTERACTIVE = 2;public const int LOGON32_PROVIDER_DEFAULT = 0;WindowsImpersonationContext impersonationContext; [DllImport("advapi32.dll")]public static extern int LogonUserA(String lpszUserName, 	String lpszDomain,	String lpszPassword,	int dwLogonType, 	int dwLogonProvider,	ref IntPtr phToken);[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]public static extern int DuplicateToken(IntPtr hToken, 	int impersonationLevel,  	ref IntPtr hNewToken);                          [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]public static extern bool RevertToSelf();[DllImport("kernel32.dll", CharSet=CharSet.Auto)]public static extern  bool CloseHandle(IntPtr handle);public void Page_Load(Object s, EventArgs e){	if(impersonateValidUser("username", "domain", "password"))	{		//Insert your code that runs under the security context of a specific user here.		undoImpersonation();	}	else	{		//Your impersonation failed. Therefore, include a fail-safe mechanism here.	}}private bool impersonateValidUser(String userName, String domain, String password){	WindowsIdentity tempWindowsIdentity;	IntPtr token = IntPtr.Zero;	IntPtr tokenDuplicate = IntPtr.Zero;	if(RevertToSelf())	{		if(LogonUserA(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)				{					CloseHandle(token);					CloseHandle(tokenDuplicate);					return true;				}			}		} 	}	if(token!= IntPtr.Zero)		CloseHandle(token);	if(tokenDuplicate!=IntPtr.Zero)		CloseHandle(tokenDuplicate);	return false;}private void undoImpersonation(){	impersonationContext.Undo();}</script>
Visual J# .NET
<%@ Page language="VJ#" %><%@ Import Namespace="System.Web" %><%@ Import Namespace="System.Web.Security" %><%@ Import Namespace="System.Security.Principal" %><%@ Import Namespace="System.Runtime.InteropServices" %><script runat=server>public static int LOGON32_LOGON_INTERACTIVE = 2;public static int LOGON32_PROVIDER_DEFAULT = 0;WindowsImpersonationContext impersonationContext; /** @attribute DllImport("advapi32.dll") */ public static native int LogonUserA(String lpszUserName, 	String lpszDomain, 	String lpszPassword,	int dwLogonType, 	int dwLogonProvider, 	System.IntPtr[] phToken);/** @attribute DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true) */ public static native int DuplicateToken(System.IntPtr hToken,	int impersonationLevel,	System.IntPtr[] hNewToken);/** @attribute DllImport("kernel32.dll",CharSet=CharSet.Auto) */ public static native  boolean CloseHandle(System.IntPtr[] handle);/** @attribute DllImport("advapi32.dll", 	 CharSet=CharSet.Auto,SetLastError=true) */	 public static native boolean RevertToSelf();public void Page_Load(Object s, System.EventArgs e){	if(impersonateValidUser("username", "domain", " password"))	{		//Insert your code that runs under the security context of a specific user here.		undoImpersonation();	}	else	{		//Your impersonation failed. Therefore, include a fail-safe mechanism here.	}}private boolean impersonateValidUser(String userName, String domain, String password){	WindowsIdentity tempWindowsIdentity;	System.IntPtr[] token = new System.IntPtr[1];	System.IntPtr[] tokenDuplicate = new System.IntPtr[1];	if(RevertToSelf())	{		if(LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, 			LOGON32_PROVIDER_DEFAULT, token) != 0)		{			if(DuplicateToken(token[0], 2, tokenDuplicate) != 0) 			{				tempWindowsIdentity = new WindowsIdentity(tokenDuplicate[0]);				impersonationContext = tempWindowsIdentity.Impersonate();				if (impersonationContext != null)				{					CloseHandle(tokenDuplicate);					CloseHandle(token);					return true;				}							}					} 	}	if(!token[0].Equals(System.IntPtr.Zero))		CloseHandle(token);	if(!tokenDuplicate[0].Equals(System.IntPtr.Zero))		CloseHandle(tokenDuplicate);	return false;}private void undoImpersonation(){	impersonationContext.Undo();}</script>				
Pastaba Procesą, kuris impersonates konkrečiam vartotojui dėl tapatybės siūlai turi turėti "Veikia kaip operacinės sistemos dalis" privilegija Jei Aspnet_wp.exe procesas veikia "Microsoft Windows 2000" kompiuteryje. Į Jeigu "Veikia kaip operacinės sistemos dalis" privilegija nebūtina, Aspnet_wp.exe procesas veikia kompiuteryje su Windows XP arba Windows Server 2003 m. kompiuteryje. Numatyta, kad Aspnet_wp.exe procesas veikia pagal kompiuterio abonemento pavadinimą ASPNET. Tačiau šis abonementas nėra Neturite reikiamų teisių apsimesti konkrečiam vartotojui. Gaunate yra klaidos pranešimas, jei bandote apsimesti konkrečiam vartotojui. .

Norėdami išspręsti šią problemą, naudokite vieną iš šių metodų:
  • Suteikti "Veikia kaip operacinės sistemos dalis" privilegija į ASPNET sąskaitą.

    Pastaba Mes rekomenduojame šį metodą Norėdami išspręsti, problema.
  • Pakeiskite paskyrą, Aspnet_wp.exe procesas prasideda pagal sistemą sudaro <processModel>konfigūracijos skyriuje Machine.config failo.</processModel>
atgal į į viršuje
Nuorodos
Papildomos informacijos apie ASP.NET saugumo, spustelėkite toliau straipsnio numerį ir peržiūrėkite straipsnį, ir Microsoft žinių bazėje:
306590ASP.NET saugumo apžvalga
įeiti nepavyko neapibrėžta reikšmė (null) apsimesti

Įspėjimas: šis straipsnis išverstas automatiškai

Savybės

Straipsnio ID: 306158 – Paskutinė peržiūra: 06/06/2013 23:56:00 – Peržiūra: 1.0

  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • kbinfo kbsecurity kbmt KB306158 KbMtlt
Atsiliepimai
ml>ft.com/c.gif?DI=4050&did=1&t="> document.write(" rotocol) + "//c.microsoft.com/ms.js'><\/script>"); >