Bagikan melalui


Meniru dan Mengembalikan

Catatan

Artikel ini berlaku untuk Windows.

Untuk informasi tentang ASP.NET Core, lihat Keamanan ASP.NET Core.

Terkadang Anda mungkin perlu mendapatkan token akun Windows untuk meniru akun Windows. Misalnya, aplikasi berbasis ASP.NET Anda mungkin harus bekerja atas nama beberapa pengguna pada waktu yang berbeda. Aplikasi Anda mungkin menerima token yang mewakili administrator dari Layanan Informasi Internet (IIS), meniru pengguna tersebut, melakukan operasi, dan kembali ke identitas sebelumnya. Selanjutnya, ini mungkin menerima token dari IIS yang mewakili pengguna dengan hak yang lebih sedikit, melakukan beberapa operasi, dan kembali lagi.

Dalam situasi di mana aplikasi Anda harus meniru akun Windows yang belum dilampirkan ke alur saat ini oleh IIS, Anda harus mengambil token akun tersebut dan menggunakannya untuk mengaktifkan akun. Anda bisa melakukan ini dengan melakukan tugas-tugas berikut:

  1. Ambil token akun untuk pengguna tertentu dengan melakukan panggilan ke metode LogonUser yang tidak dikelola. Metode ini tidak ada di pustaka kelas dasar .NET, tetapi terletak di advapi32.dllyang tidak dikelola. Mengakses metode dalam kode yang tidak dikelola adalah operasi lanjutan dan berada di luar cakupan diskusi ini. Untuk informasi selengkapnya, lihat Mengoperasikan dengan Kode Tidak Terkelola. Untuk informasi selengkapnya tentang metode LogonUser dan advapi32.dll, lihat dokumentasi Platform SDK.

  2. Buat instans baru kelas WindowsIdentity, yang meneruskan token. Kode berikut menunjukkan panggilan ini, di mana hToken mewakili token Windows.

    WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);  
    
    Dim impersonatedIdentity As New WindowsIdentity(hToken)  
    
  3. Mulai peniruan dengan membuat instans WindowsImpersonationContext baru kelas dan menginisialisasinya dengan WindowsIdentity.Impersonate metode kelas yang diinisialisasi, seperti yang ditunjukkan dalam kode berikut.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();  
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()  
    
  4. Ketika Anda tidak perlu lagi meniru, panggil WindowsImpersonationContext.Undo metode untuk mengembalikan peniruan, seperti yang ditunjukkan dalam kode berikut.

    myImpersonation.Undo();  
    
    myImpersonation.Undo()  
    

Jika kode tepercaya telah melampirkan WindowsPrincipal objek ke alur, Anda dapat memanggil metode instans Meniru, yang tidak mengambil token akun. Perhatikan bahwa ini hanya berguna ketika objek WindowsPrincipal pada alur mewakili pengguna selain yang saat ini sedang dijalankan proses. Misalnya, Anda mungkin mengalami situasi ini menggunakan ASP.NET dengan autentikasi Windows diaktifkan dan peniruan identitas dinonaktifkan. Dalam hal ini, proses berjalan di bawah akun yang dikonfigurasi di Layanan Informasi Internet (IIS) sementara prinsipal saat ini mewakili pengguna Windows yang mengakses halaman.

Perhatikan bahwa tidak meniru atau Membatalkan perubahan objek Utama (IPrincipal) yang terkait dengan konteks panggilan saat ini. Sebaliknya, peniruan identitas dan mengembalikan mengubah token yang terkait dengan proses sistem operasi saat ini.

Lihat juga