Fungsi ImpersonateSecurityContext (sspi.h)

Fungsi ImpersonateSecurityContext memungkinkan server untuk meniru klien dengan menggunakan token yang sebelumnya diperoleh oleh panggilan ke AcceptSecurityContext (Umum) atau QuerySecurityContextToken. Fungsi ini memungkinkan server aplikasi untuk bertindak sebagai klien, dan dengan demikian semua kontrol akses yang diperlukan diberlakukan.

Sintaks

KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
  [in] PCtxtHandle phContext
);

Parameter

[in] phContext

Handel konteks untuk meniru. Handel ini harus diperoleh dengan panggilan ke fungsi AcceptSecurityContext (Umum).

Menampilkan nilai

Jika fungsi berhasil, fungsi akan mengembalikan SEC_E_OK.

Jika fungsi gagal, fungsi mengembalikan kode kesalahan berikut.

Menampilkan kode Deskripsi
SEC_E_INVALID_HANDLE
Handel yang diteruskan ke fungsi tidak valid.
SEC_E_NO_IMPERSONATION
Klien tidak dapat ditiru.
SEC_E_UNSUPPORTED_FUNCTION
Nilai ini dikembalikan oleh mode kernel Schannel untuk menunjukkan bahwa fungsi ini tidak didukung.

Keterangan

Aplikasi server memanggil fungsi ImpersonateSecurityContext ketika perlu meniru klien. Sebelum melakukannya, server harus telah mendapatkan handel konteks yang valid. Untuk mendapatkan handel konteks, server harus memanggil AcceptSecurityContext (Umum) untuk mengirimkan token keamanan masuk klien ke sistem keamanan. Server mendapatkan handel konteks jika konteks masuk divalidasi. Fungsi ini membuat token peniruan dan memungkinkan utas atau proses berjalan dengan konteks peniruan.

Saat menggunakan penyedia dukungan keamanan (SSP) Schannel, aplikasi server harus meneruskan bendera ASC_REQ_MUTUAL_AUTH saat memanggil AcceptSecurityContext (Umum). Ini memastikan bahwa klien dimintai sertifikat klien selama jabat tangan SSL/TLS. Ketika sertifikat klien diterima, paket Schannel memverifikasi sertifikat klien dan mencoba memetakannya ke akun pengguna. Ketika pemetaan ini berhasil, maka token pengguna klien dibuat dan fungsi ini berhasil.

Server aplikasi harus memanggil fungsi RevertSecurityContext setelah selesai atau ketika perlu memulihkan konteks keamanannya sendiri.

ImpersonateSecurityContext tidak tersedia dengan semua paket keamanan di semua platform. Biasanya, ini hanya diimplementasikan pada platform dan dengan paket keamanan yang mendukung peniruan. Untuk mempelajari apakah paket keamanan mendukung peniruan identitas, panggil fungsi QuerySecurityPackageInfo .

Catatan Jika fungsi ImpersonateSecurityContext gagal, klien tidak ditiru, dan semua permintaan klien berikutnya dibuat dalam konteks keamanan proses yang memanggil fungsi. Jika proses panggilan berjalan sebagai akun istimewa, proses ini dapat melakukan tindakan yang tidak diizinkan untuk dilakukan klien. Untuk menghindari risiko keamanan, proses panggilan harus selalu memeriksa nilai pengembalian. Jika nilai yang dikembalikan menunjukkan bahwa panggilan fungsi gagal, tidak ada permintaan klien yang harus dijalankan.
 
Semua fungsi peniruan, termasuk ImpersonateSecurityContext memungkinkan peniruan yang diminta jika salah satu hal berikut ini benar:
  • Tingkat peniruan token yang diminta kurang dari SecurityImpersonation, seperti SecurityIdentification atau SecurityAnonymous.
  • Pemanggil memiliki hak istimewa SeImpersonatePrivilege .
  • Proses (atau proses lain dalam sesi masuk pemanggil) membuat token menggunakan kredensial eksplisit melalui fungsi LogonUser atau LsaLogonUser .
  • Identitas terautentikasi sama dengan pemanggil.
Windows XP dengan SP1 dan yang lebih lama: Hak istimewa SeImpersonatePrivilege tidak didukung.

Windows XP: Hak istimewa SeImpersonatePrivilege tidak didukung sampai Windows XP dengan Paket Layanan 2 (SP2).

Persyaratan

   
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header sspi.h (termasuk Security.h)
Pustaka Secur32.lib
DLL Secur32.dll

Lihat juga

AcceptSecurityContext (Umum)

QuerySecurityPackageInfo

RevertSecurityContext

Fungsi SSPI