Prinsipal dan Objek Identitas
Catatan
Artikel ini berlaku untuk Windows.
Untuk informasi tentang ASP.NET Core, lihat Keamanan ASP.NET Core.
Kode terkelola dapat menemukan identitas atau peran utama melalui objek IPrincipal, yang berisi referensi ke objek IIdentity. Mungkin berguna untuk membandingkan identitas dan objek utama dengan konsep yang sudah dikenal seperti akun pengguna dan grup. Di sebagian besar lingkungan jaringan, akun pengguna mewakili orang atau program, sementara akun grup mewakili kategori pengguna tertentu dan hak yang mereka miliki. Demikian pula, objek identitas .NET mewakili pengguna, sementara peran mewakili keanggotaan dan konteks keamanan. Dalam .NET, objek utama merangkum objek identitas dan peran. Aplikasi .NET memberikan hak kepada perwakilannya berdasarkan identitasnya atau, yang lebih umum, keanggotaan perannya.
Objek Identitas
Objek identitas merangkum informasi tentang pengguna atau entitas yang sedang divalidasi. Pada tingkat paling dasar, objek identitas berisi nama dan jenis autentikasi. Nama dapat berupa nama pengguna atau nama akun Windows, sementara jenis autentikasi dapat berupa protokol masuk yang didukung, seperti Kerberos V5, atau nilai kustom. .NET mendefinisikan objek GenericIdentity yang dapat digunakan untuk sebagian besar skenario masuk kustom dan objek WindowsIdentity yang lebih khusus yang dapat digunakan ketika Anda ingin aplikasi Anda mengandalkan autentikasi Windows. Selain itu, Anda dapat menentukan kelas identitas Anda sendiri yang merangkum informasi pengguna kustom.
Antarmuka IIdentity menentukan properti untuk mengakses nama dan jenis autentikasi, seperti Kerberos V5 atau NTLM. Semua kelas Identitas mengimplementasikan antarmuka IIdentity. Tidak ada hubungan yang dibutuhakn antara objek Identitas dan token proses Windows di mana utas saat ini dijalankan. Namun, jika objek Identitas adalah objek WindowsIdentity, identitas diasumsikan mewakili token keamanan Windows.
Objek Utama
Objek utama mewakili konteks keamanan di mana kode berjalan. Aplikasi yang menerapkan hak pemberian keamanan berbasis-peran berdasarkan peran yang terkait dengan objek utama. Mirip dengan objek identitas, .NET menyediakan objek GenericPrincipal dan objek WindowsPrincipal. Anda juga dapat menentukan peran kustom Anda sendiri.
Antarmuka IPrincipal mendefinisikan properti untuk mengakses objek Identitas terkait maupun metode untuk menentukan apakah pengguna yang diidentifikasi oleh objek Utama adalah anggota dari peran tertentu. Semua kelas Utama mengimplementasikan antarmuka IPrincipal serta properti dan metode tambahan yang diperlukan. Misalnya, runtime bahasa umum menyediakan kelas WindowsPrincipal, yang mengimplementasikan fungsionalitas tambahan untuk memetakan keanggotaan grup ke peran.
Objek Utama terikat ke objek konteks panggilan (CallContext) dalam domain aplikasi (AppDomain). Konteks panggilan default selalu dibuat dengan setiap AppDomain baru, sehingga selalu ada konteks panggilan yang tersedia untuk menerima objek Utama. Saat utas baru dibuat, objek CallContext juga dibuat untuk utas tersebut. Referensi objek Utama secara otomatis disalin dari utas pembuatan ke CallContext utas baru. Jika runtime tidak dapat menentukan objek Utama mana yang dimiliki oleh pembuat utas, maka runtime mengikuti kebijakan default untuk pembuatan objek Utama dan Identitas.
Kebijakan khusus domain aplikasi yang dapat dikonfigurasi menentukan aturan untuk memutuskan jenis objek Utama apa yang akan dikaitkan dengan domain aplikasi baru. Jika kebijakan keamanan mengizinkan, runtime dapat membuat objek Utama dan Identitas yang mencerminkan token sistem operasi yang terkait dengan utas eksekusi saat ini. Secara default, runtime menggunakan objek Utama dan Identitas yang mewakili pengguna yang tidak diautentikasi. Runtime tidak membuat objek Utama dan Identitas default ini sampai kode mencoba mengaksesnya.
Kode tepercaya yang membuat domain aplikasi dapat mengatur kebijakan domain aplikasi yang mengontrol konstruksi objek Utama dan Identitas default. Kebijakan khusus domain aplikasi ini berlaku untuk semua utas eksekusi pada domain aplikasi tersebut. Host yang tidak terkelola dan terpercaya secara inheren memiliki kemampuan untuk mengatur kebijakan ini, tetapi kode terkelola yang menetapkan kebijakan ini harus memiliki System.Security.Permissions.SecurityPermission untuk mengontrol kebijakan domain.
Saat mengirimkan objek Utama di seluruh domain aplikasi tetapi dalam proses yang sama (dan oleh karena itu pada komputer yang sama), infrastruktur jarak jauh menyalin referensi ke objek Utama yang terkait dengan konteks pemanggil ke konteks penerima panggilan.