Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Bir ASP.NET uygulamasında kimliğe bürünme nasıl

ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.

Makalenin İngilizcesi aşağıdaki gibidir: 306158
Bu makalede, aşağıdaki Microsoft .NET için denilmektedir. Framework sınıf kitaplığı ad:
  • System.Web.Security
  • System.Security.Principal
  • System.Runtime.InteropServices
Özet
Bu makalede, uygulamak için farklı yöntemler bir ASP.NET uygulamasında kimliğe bürünme.
Daha fazla bilgi
ASP iş parçacığı üzerinde kullanıcı kimliğine bürünmek istiyorsanız, üzerinde requirments aşağıdaki yöntemlerden birini kullanabilirsiniz:
Not İş parçacığı kullanıcı hangi belirlemek için aşağıdaki kodu kullanabilirsiniz olarak çalıştırma:
System.Security.Principal.WindowsIdentity.GetCurrent().Name				

IIS kimlik doğrulaması taklit hesabı veya kullanıcı

Microsoft Internet Information Services (IIS) taklit etmek için her isteği her sayfası bir ASP.NET uygulaması için kullanıcı kimlik doğrulaması, eklemeniz gerekir bir <identity></identity> etiketi bu uygulamanın Web.config dosyasında ve impersonate özniteliği trueolarak ayarlayın. Örneğin:
<identity impersonate="true" />				
başa dön

Tüm istekleri bir ASP.NET uygulaması için belirli bir kullanıcının kimliğine bürün

Tüm sayfalardaki tüm istekleri için belirli bir kullanıcının kimliğine bürünmek için bir ASP.NET uygulaması kullanıcı adı ve parola öznitelikleri belirtebilirsiniz <identity></identity> söz konusu uygulamanın Web.config dosyasında etiket. Örneğin:
<identity impersonate="true" userName="accountname" password="password" />				
Not Üzerinde belirli bir kullanıcıyı taklit eden işlem kimliği bir iş parçacığı, "işletim sisteminin bir parçası çalış" ayrıcalığının olması gerekir. Tarafından Varsayılan, Aspnet_wp.exe işlemi ASPNET adlı bir bilgisayar hesabı altında çalışır. Ancak, bu hesabı taklit etmek için gereken ayrıcalıklara sahip değil bir Belirli bir kullanıcı. Taklit çalışırsanız bir hata iletisi alırsınız bir Belirli bir kullanıcı. Bu bilgiler yalnızca .NET Framework 1.0 için geçerlidir. Bu ayrıcalık .NET Framework 1.1 için gerekli değildir.

Geçici bir çözüm bulmak için Bu sorun, aşağıdaki yöntemlerden birini kullanın:
  • "İşletim sisteminin bir parçası çalış" ayrıcalığı ASPNET hesabı için (en düşük ayrıcalıklı hesabı).

    Not Bu soruna geçici bir çözüm bulmak için bu yöntemi kullanabilirsiniz, ancak Microsoft, bu yöntem önermez.
  • Aspnet_wp.exe işlemi çalıştığı hesabı değiştirme Sistem altında <processModel>yapılandırma bölümünde hesap Machine.config dosyasının.</processModel>
başa dön

Kod kimlik doğrulama kullanıcı kimliğine bürün

Yalnızca belirli bir bölümü kod çalıştırdığınızda kullanabilirsiniz (User.Identity) kimlik doğrulama kullanıcı kimliğine bürünmek için kod izleyin. Bu yöntem kimlik doğrulama kullanıcı kimliği gerektirir WindowsIdentitytürüdür.

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();				
başa dön

Kod içinde belirli bir kullanıcının kimliğine bürün

Yalnızca belirli bir çalıştırdığınızda, belirli bir kullanıcının kimliğine bürünmek için bölüm kodunu, şu kodu kullanın:

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>				
Not Üzerinde belirli bir kullanıcıyı taklit eden işlem kimliği bir iş parçacığı "işletim sisteminin bir parçası çalış" ayrıcalığına sahip olması gerekir Aspnet_wp.exe işlemi Microsoft Windows 2000 tabanlı bir bilgisayarda çalıştırıyorsanız. , "İşletim sisteminin bir parçası çalış" ayrıcalığı gerekli değildir, Aspnet_wp.exe işlemini çalıştıran Windows XP tabanlı bir bilgisayarda veya Windows Server 2003 tabanlı bir bilgisayar. Varsayılan olarak, Aspnet_wp.exe işlemi ASPNET adlı bir bilgisayar hesabının altında çalışır. Ancak, bu hesap yapar Belirli bir kullanıcının kimliğine bürünmek için gereken ayrıcalıklara sahip değil. Aldığınız bir Belirli bir kullanıcının kimliğine bürünmek çalışırsanız, hata iletisi. .

Bu soruna geçici bir çözüm için aşağıdaki yöntemlerden birini kullanın:
  • "İşletim sisteminin bir parçası çalış" ayrıcalığı ASPNET hesabı için.

    Not Geçici bir çözüm bulmak için bu yöntemi önermiyoruz sorun.
  • Aspnet_wp.exe işlemi çalıştığı hesabı değiştirme Sistem altında <processModel>yapılandırma bölümünde hesap Machine.config dosyasının.</processModel>
dön üst
Referanslar
Hakkında ek bilgi için ASP.NET güvenliği makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın Microsoft Knowledge Base:
306590ASP.NET güvenliğine genel bakış
oturum açma başarısız oldu, boş (null) taklit

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 306158 - Son İnceleme: 06/07/2013 16:02:00 - Düzeltme: 5.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 KbMttr
Geri bildirim