Kimliğe Bürünme ve Geri Alma

Not

Bu makale Windows için geçerlidir.

ASP.NET Core hakkında bilgi için bkz . ASP.NET Core Security.

Bazen bir Windows hesabının kimliğine bürünmek için bir Windows hesabı belirteci almanız gerekebilir. Örneğin, ASP'niz. NET tabanlı uygulamanın farklı zamanlarda birkaç kullanıcı adına işlem görmesi gerekebilir. Uygulamanız, Internet Information Services'ten (IIS) bir yöneticiyi temsil eden bir belirteci kabul edebilir, bu kullanıcının kimliğine bürünebilir, bir işlem gerçekleştirebilir ve önceki kimliğe geri dönebilir. Ardından, IIS'den daha az haklara sahip bir kullanıcıyı temsil eden bir belirteci kabul edebilir, bazı işlemler gerçekleştirebilir ve yeniden döndürebilir.

Uygulamanızın IIS tarafından geçerli iş parçacığına bağlı olmayan bir Windows hesabının kimliğine bürünmesi gereken durumlarda, bu hesabın belirtecini almanız ve hesabı etkinleştirmek için kullanmanız gerekir. Bunu yapmak için aşağıdaki görevleri gerçekleştirebilirsiniz:

  1. Yönetilmeyen LogonUser yöntemine çağrı yaparak belirli bir kullanıcı için hesap belirtecini alın. Bu yöntem .NET temel sınıf kitaplığında değil, yönetilmeyen advapi32.dll bulunur. Yönetilmeyen koddaki yöntemlere erişmek gelişmiş bir işlemdir ve bu tartışmanın kapsamı dışındadır. Daha fazla bilgi için bkz . Yönetilmeyen Kodla Birlikte Çalışma. LogonUser yöntemi ve advapi32.dll hakkında daha fazla bilgi için Platform SDK belgelerine bakın.

  2. Belirteci geçirerek WindowsIdentity sınıfının yeni bir örneğini oluşturun. Aşağıdaki kod, bir Windows belirtecini temsil eden hToken bu çağrıyı gösterir.

    WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);  
    
    Dim impersonatedIdentity As New WindowsIdentity(hToken)  
    
  3. Aşağıdaki kodda gösterildiği gibi sınıfın WindowsImpersonationContext yeni bir örneğini oluşturup başlatılan sınıfın yöntemiyle WindowsIdentity.Impersonate başlatarak kimliğe bürünme işlemine başlayın.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();  
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()  
    
  4. Artık kimliğe bürünmenize gerek kalmadığında, aşağıdaki kodda gösterildiği gibi kimliğe bürünme işlemini geri almak için yöntemini çağırın WindowsImpersonationContext.Undo .

    myImpersonation.Undo();  
    
    myImpersonation.Undo()  
    

Güvenilir kod iş parçacığına zaten bir WindowsPrincipal nesne eklemişse, hesap belirteci almayan Impersonate örnek yöntemini çağırabilirsiniz. Bunun yalnızca iş parçacığındaki WindowsPrincipal nesnesi, işlemin yürütülmekte olduğu kullanıcı dışında bir kullanıcıyı temsil ettiğinde yararlıdır. Örneğin, Windows kimlik doğrulaması açıkken ve kimliğe bürünme kapalıyken ASP.NET kullanarak bu durumla karşılaşabilirsiniz. Bu durumda, geçerli sorumlu sayfaya erişen Windows kullanıcısını temsil ederken, işlem Internet Information Services'te (IIS) yapılandırılmış bir hesap altında çalıştırılır.

Kimliğe Bürün veya Geri Al'ın geçerli çağrı bağlamıyla ilişkili Asıl nesnenin (IPrincipal) değişmediğini unutmayın. Bunun yerine, kimliğe bürünme ve geri döndürme, geçerli işletim sistemi işlemiyle ilişkili belirteci değiştirir.

Ayrıca bkz.