Mengelola Klaim dan Otorisasi dengan Model Identitas

Otorisasi adalah proses menentukan entitas mana yang memiliki izin untuk mengubah, melihat, atau mengakses sumber daya komputer. Misalnya, dalam bisnis, hanya manajer yang dapat diizinkan untuk mengakses file karyawan mereka. Windows Communication Foundation (WCF) mendukung dua mekanisme untuk melakukan pemrosesan otorisasi. Mekanisme pertama memungkinkan Anda mengontrol otorisasi menggunakan konstruksi runtime bahasa umum (CLR) yang ada. Yang kedua adalah model berbasis klaim yang dikenal sebagai Model Identitas. WCF menggunakan Model Identitas untuk membuat klaim dari pesan masuk; Kelas Model Identitas dapat diperluas untuk mendukung jenis klaim baru untuk skema otorisasi kustom. Topik ini menyajikan gambaran umum konsep pemrograman utama fitur Model Identitas, serta daftar kelas terpenting yang digunakan fitur.

Skenario Model Identitas

Skenario berikut mewakili penggunaan Model Identitas.

Skenario 1: Mendukung Identitas, Peran, dan Klaim Grup

Pengguna mengirim pesan ke layanan Web. Persyaratan kontrol akses layanan Web menggunakan identitas, peran, atau grup. Pengirim pesan dipetakan ke serangkaian peran atau grup. Informasi peran atau grup digunakan untuk melakukan pemeriksaan akses.

Skenario 2: Mendukung Klaim Kaya

Pengguna mengirim pesan ke layanan Web. Persyaratan kontrol akses layanan Web memerlukan model yang lebih kaya daripada identitas, peran, atau grup. Layanan Web menentukan apakah pengguna tertentu memiliki akses ke sumber daya tertentu yang dilindungi menggunakan model berbasis klaim yang kaya. Misalnya, satu pengguna mungkin dapat membaca informasi tertentu, seperti informasi gaji, yang tidak dapat diakses oleh pengguna lain.

Skenario 3: Pemetaan Klaim yang Berbeda

Pengguna mengirim pesan ke layanan Web. Pengguna dapat menentukan mandat mereka dalam beberapa cara berbeda: sertifikat X.509, token nama pengguna, atau token Kerberos. Layanan Web diperlukan untuk melakukan pemeriksaan kontrol akses dengan cara yang sama, terlepas dari jenis mandat pengguna. Jika jenis mandat tambahan didukung dari waktu ke waktu, sistem harus berkembang sesuai.

Skenario 4: Menentukan Akses ke Beberapa Sumber Daya

Layanan Web mencoba mengakses beberapa sumber daya. Layanan menentukan sumber daya terlindungi mana yang dapat diakses oleh pengguna tertentu dengan membandingkan klaim yang terkait dengan pengguna dengan klaim yang diperlukan untuk mengakses sumber daya.

Ketentuan Model Identitas

Daftar berikut mendefinisikan istilah kunci yang digunakan untuk menjelaskan konsep Model Identitas.

Kebijakan otorisasi
Seperangkat aturan untuk memetakan serangkaian klaim input ke serangkaian klaim output. Mengevaluasi kebijakan otorisasi menghasilkan rangkaian klaim yang ditambahkan ke konteks evaluasi dan selanjutnya konteks otorisasi.

Konteks otorisasi
Serangkaian klaim dan nol properti atau lebih. Hasil evaluasi satu atau lebih kebijakan otorisasi.

Klaim
Kombinasi jenis klaim, hak, dan nilai.

Kumpulan klaim
Serangkaian klaim yang dikeluarkan oleh penerbit sertifikat tertentu.

Jenis klaim
Semacam klaim. Klaim yang ditentukan oleh Model API identitas adalah properti dari kelas ClaimType. Contoh jenis klaim yang disediakan sistem adalah Dns, Email, Hash, Name, Rsa, Sid, Spn, System, Thumbprint, Uri, dan X500DistinguishedName.

Konteks Evaluasi
Konteks di mana kebijakan otorisasi dievaluasi. Berisi properti dan serangkaian klaim. Menjadi dasar konteks otorisasi Setelah evaluasi selesai.

Klaim identitas
Klaim yang haknya adalah identitas.

Penerbit
Serangkaian klaim yang berisi setidaknya satu klaim identitas dan dianggap telah mengeluarkan serangkaian klaim lain.

Properti
Serangkaian informasi yang terkait dengan konteks evaluasi atau konteks otorisasi.

Sumber daya yang dilindungi
Sesuatu dalam sistem yang hanya dapat digunakan, diakses, atau dimanipulasi jika persyaratan tertentu dipenuhi terlebih dahulu.

Right
Kemampuan atas sumber daya. Hak yang ditentukan oleh API Model identitas adalah properti kelas Rights. Contoh hak yang disediakan sistem adalah Identity dan PossessProperty.

Nilai
Sesuatu di mana hak diklaim.

Klaim

Model Identitas adalah sistem berbasis klaim. Klaim menggambarkan kemampuan yang terkait dengan beberapa entitas dalam sistem, seringkali pengguna sistem itu. Serangkaian klaim yang terkait dengan entitas tertentu dapat dianggap sebagai kunci. Klaim tertentu menentukan bentuk kunci itu, mirip dengan kunci fisik yang digunakan untuk membuka kunci di pintu. Klaim digunakan untuk mendapatkan akses ke sumber daya. Akses ke sumber daya yang dilindungi ditentukan dengan membandingkan klaim yang diperlukan untuk mengakses sumber daya tersebut dengan klaim yang terkait dengan entitas yang mencoba mengakses.

Klaim adalah ekspresi hak sehubungan dengan nilai tertentu. Hak bisa menjadi sesuatu seperti "Baca", "Tulis", atau "Jalankan." Nilai bisa berupa database, file, kotak surat, atau properti. Klaim juga memiliki jenis klaim. Kombinasi jenis klaim dan hak menyediakan mekanisme untuk menentukan kemampuan sehubungan dengan nilai. Misalnya, klaim jenis "File", dengan "Baca" kanan di atas nilai "Biography.doc", menunjukkan bahwa entitas yang terkait dengan klaim tersebut memiliki akses baca ke file Biography.doc. Klaim jenis "Nama", dengan hak "PossessProperty" di atas nilai "Martin", menunjukkan bahwa entitas yang terkait dengan klaim tersebut memiliki properti Nama dengan nilai "Martin".

Meskipun berbagai jenis dan hak klaim didefinisikan sebagai bagian dari Model Identitas, sistem ini dapat diperluas, memungkinkan berbagai sistem, yang dibangun di atas infrastruktur Model Identitas, untuk menentukan jenis dan hak klaim tambahan sesuai kebutuhan.

Klaim Identitas

Salah satu hak khususnya adalah identitas. Klaim yang memiliki hak ini membuat pernyataan tentang identitas entitas. Misalnya, klaim jenis "nama prinsipal pengguna" (UPN) dengan nilai someone@example.com dan hak Identity menunjukkan identitas tertentu di domain tertentu.

Klaim Identitas Sistem

Model Identitas mendefinisikan satu klaim identitas: System. System Klaim identitas menunjukkan bahwa entitas adalah aplikasi atau sistem saat ini.

Serangkaian Klaim

Model klaim yang mewakili identitas penting karena klaim selalu diterbitkann oleh beberapa entitas dalam sistem, bahkan jika entitas itu pada akhirnya adalah beberapa konsep "diri". Klaim dikelompokkan bersama sebagai satu set dan setiap set memiliki penerbit sertifikat. Penerbit sertifikat hanyalah serangkaian klaim. Hubungan rekursif seperti itu pada akhirnya harus berakhir dan rangkaian klaim apa pun dapat menjadi penerbit sertifikatnya sendiri.

Gambar berikut menunjukkan contoh tiga set klaim di mana satu set klaim memiliki, sebagai penerbit sertifikatnya, serangkaian klaim, yang pada gilirannya memiliki klaim Sistem yang ditetapkan sebagai penerbit sertifikatnya. Oleh karena itu, serangkaian klaim membentuk hierarki yang mungkin sangat dalam.

Sets of claims within the hierarchy.

Beberapa rangkaian klaim mungkin memiliki rangkaian klaim penerbitan yang sama, seperti yang diilustrasikan dalam gambar berikut:

Multiple sets of claims with the same issuing claim set.

Dengan pengecualian rangkaian klaim yang merupakan penerbit sertifikatnya sendiri, Model Identitas tidak memberikan dukungan apa pun untuk rangkaian klaim untuk membentuk perulangan. Dengan demikian situasi di mana rangkaian klaim A diterbitkan oleh rangkaian klaim B, yang dengan sendirinya diterbitkan oleh rangkaian klaim A, tidak akan pernah muncul. Selain itu, Model Identitas tidak memberikan dukungan apa pun untuk rangkaian klaim yang memiliki beberapa penerbit sertifikat. Jika dua atau lebih penerbit sertifikat harus menerbitkan rangkaian klaim tertentu, maka Anda harus menggunakan beberapa rangkaian klaim, masing-masing berisi klaim yang sama, tetapi memiliki penerbit sertifikat yang berbeda.

Asal Usul Klaim

Klaim dapat berasal dari berbagai sumber. Salah satu sumber klaim yang umum adalah mandat yang diberikan oleh pengguna, misalnya sebagai bagian dari pesan yang dikirim ke layanan Web. Sistem memvalidasi klaim tersebut, dan klaim tersebut menjadi bagian dari serangkaian klaim yang terkait dengan pengguna. Komponen sistem lainnya juga dapat menjadi sumber klaim, termasuk, namun tidak terbatas pada, sistem operasi, tumpukan jaringan, lingkungan run-time, atau aplikasi. Selain itu, layanan jarak jauh juga dapat menjadi sumber klaim.

Kebijakan Otorisasi

Dalam Model Identitas, klaim dihasilkan sebagai bagian dari proses evaluasi kebijakan otorisasi. Kebijakan otorisasi memeriksa (mungkin kosong) set klaim yang ada dan dapat memilih untuk menambahkan klaim tambahan berdasarkan klaim yang sudah ada dan informasi tambahan yang tersedia. Ini memberikan dasar pemetaan antara klaim. Ada atau tidak adanya klaim dalam sistem memengaruhi perilaku kebijakan otorisasi sehubungan dengan apakah kebijakan tersebut menambahkan klaim tambahan.

Misalnya, kebijakan otorisasi memiliki akses ke database yang menyertakan tanggal lahir berbagai entitas yang menggunakan sistem. Kebijakan otorisasi menggunakan informasi itu untuk menambahkan klaim "Over18" ke konteksnya. Perhatikan bahwa klaim Over18 ini tidak mengungkapkan informasi apa pun tentang entitas selain fakta bahwa entitas tersebut berusia di atas 18 tahun. Perhatikan bahwa interpretasi klaim 'Over18' bergantung pada pemahaman semantik klaim itu. Kebijakan otorisasi yang menambahkan klaim memahami semantik tersebut di beberapa tingkat. Kode yang kemudian memeriksa klaim yang dihasilkan dari evaluasi kebijakan juga diinformasikan tentang semantik tersebut.

Kebijakan otorisasi yang diberikan mungkin memerlukan evaluasi beberapa kali karena, karena kebijakan otorisasi lainnya menambahkan klaim, kebijakan otorisasi tersebut mungkin menambahkan lebih banyak klaim. Model Identitas dirancang untuk melanjutkan evaluasi sampai tidak ada lagi klaim yang ditambahkan ke konteks oleh kebijakan otorisasi yang berlaku. Evaluasi berkelanjutan dari kebijakan otorisasi ini mencegah persyaratan untuk menegakkan setiap perintah evaluasi khusus sehubungan dengan kebijakan otorisasi; mereka dapat dievaluasi dalam urutan apa pun. Misalnya kebijakan X hanya menambah Klaim Z jika kebijakan A menambah Klaim B, maka jika X dievaluasi terlebih dahulu, awalnya tidak menambahkan Klaim Z. Selanjutnya A dievaluasi dan menambahkan Klaim B. X kemudian dievaluasi kedua kali, dan kali ini menambahkan Klaim Z.

Sistem tertentu mungkin memiliki banyak kebijakan otorisasi yang berlaku.

Mesin Key-Making

Mengevaluasi sekelompok kebijakan otorisasi terkait seperti menggunakan mesin yang membuat kunci. Kebijakan otorisasi masing-masing dievaluasi dan serangkaian klaim dihasilkan, membangun bentuk kunci. Setelah bentuk kunci selesai, kunci dapat digunakan untuk mencoba membuka beberapa kunci. Bentuk kunci disimpan dalam "konteks otorisasi," yang dibuat oleh manajer otorisasi.

Konteks Otorisasi

Manajer otorisasi mengevaluasi berbagai kebijakan otorisasi seperti yang dijelaskan, dan hasilnya adalah konteks otorisasi (serangkaian klaim dan beberapa properti terkait). Konteks otorisasi dapat diperiksa untuk menentukan klaim apa yang ada dalam konteks itu, hubungan antara berbagai klaim tersebut (misalnya,rangkaian klaim yang menerbitkan), dan pada akhirnya membandingkannya dengan beberapa persyaratan yang harus mereka penuhi untuk mengakses sumber daya.

Penguncian

Jika konteks otorisasi (serangkaian klaim) adalah kunci, maka persyaratan yang harus dipenuhi untuk memberikan akses ke sumber daya yang dilindungi tertentu merupakan kunci yang harus sesuai dengan kunci tersebut. Model Identitas tidak membentuk bagaimana persyaratan tersebut diungkapkan tetapi mereka melakukannya, mengingat sifat sistem berbasis klaim, melibatkan membandingkan klaim dalam konteks otorisasi terhadap beberapa set klaim yang diperlukan.

Rekap

Model Identitas didasarkan pada konsep klaim. Klaim dikelompokkan ke dalam rangkaian dan diagregasi dalam konteks otorisasi. Konteks otorisasi berisi serangkaian klaim dan merupakan hasil evaluasi satu atau lebih kebijakan otorisasi yang terkait dengan manajer otorisasi. Rangkaian klaim ini dapat diperiksa untuk menentukan apakah persyaratan akses telah terpenuhi. Gambar berikut menunjukkan hubungan antara berbagai konsep Model Identitas ini.

Managing claims and authorization

WCF dan Model Identitas

WCF menggunakan infrastruktur Model Identitas sebagai dasar untuk melakukan otorisasi. Di WCF, kelas ServiceAuthorizationBehavior memungkinkan Anda menentukan kebijakan otorisasi sebagai bagian dari layanan. Kebijakan otorisasi tersebut dikenal sebagai kebijakan otorisasi eksternal, dan mereka dapat melakukan pemrosesan klaim berdasarkan kebijakan lokal atau dengan interaksi dengan layanan jarak jauh. Manajer otorisasi, yang diwakili oleh kelas ServiceAuthorizationManager mengevaluasi kebijakan otorisasi eksternal bersama dengan kebijakan otorisasi yang mengenali berbagai jenis mandat (token) dan mengisi apa yang disebut konteks otorisasi dengan klaim yang sesuai dengan pesan masuk. Konteks otorisasi diwakili oleh kelas AuthorizationContext.

Pemrograman Model Identitas

Tabel berikut ini menjelaskan model objek yang digunakan untuk memprogram ekstensi Model Identitas. Semua kelas ini ada di namespace layanan System.IdentityModel.Policy atau System.IdentityModel.Claims.

Kelas Deskripsi
Komponen Otorisasi Kelas Model Identitas yang mengimplementasikan antarmuka IAuthorizationComponent.
IAuthorizationComponent Antarmuka yang menyediakan properti string baca-saja tunggal: Id. Nilai properti ini unik untuk setiap instans dalam sistem yang mengimplementasikan antarmuka ini.
AuthorizationContext Komponen otorisasi yang berisi serangkaian instans ClaimSet dengan nol atau lebih properti; hasil mengevaluasi satu atau beberapa Kebijakan Otorisasi.
Claim Kombinasi jenis klaim, hak, dan nilai. Bagian hak dan nilai dibatasi oleh jenis klaim.
ClaimSet Kelas dasar abstrak. Koleksi instans Claim.
DefaultClaimSet Kelas yang disegel. Implementasi kelas ClaimSet.
EvaluationContext Kelas dasar abstrak. Diteruskan ke kebijakan otorisasi selama evaluasi kebijakan.
IAuthorizationPolicy Antarmuka yang berasal dari IAuthorizationComponent dan diimplementasikan oleh kelas kebijakan otorisasi.
Rights Kelas statis yang berisi nilai hak yang telah ditentukan sebelumnya.

Kelas berikut juga digunakan untuk pemrograman Model Identitas, tetapi tidak ditemukan di namespace layanan System.IdentityModel.Policy atau System.IdentityModel.Claims.

Kelas Deskripsi
ServiceAuthorizationManager Kelas yang menyediakan metode — CheckAccessCore—untuk melakukan pemeriksaan otorisasi berbasis klaim untuk setiap operasi dalam layanan. Anda harus berasal dari kelas dan mengambil alih metode.
ServiceAuthorizationBehavior Kelas disegel yang menyediakan berbagai properti yang terkait dengan perilaku layanan karena berkaitan dengan otorisasi.
ServiceSecurityContext Kelas yang menyediakan konteks keamanan, termasuk konteks otorisasi, untuk operasi yang sedang berjalan (atau akan dijalankan). Instans kelas ini adalah bagian dari OperationContext.

Anggota Penting

Anggota berikut biasanya digunakan untuk membuat jenis klaim baru.

Anggota Deskripsi
CheckAccessCore Kelas turunan menerapkan metode ini untuk melakukan pemeriksaan akses berbasis klaim sebelum menjalankan operasi dalam suatu layanan. Setiap dan semua informasi dalam OperationContext yang disediakan, atau di tempat lain, dapat diperiksa saat membuat keputusan pemeriksaan akses. Jika CheckAccessCore mengembalikan true, maka akses diberikan dan operasi diizinkan untuk dijalankan. Jika CheckAccessCore mengembalikan false, maka akses ditolak dan operasi tidak berjalan. Misalnya, lihat Cara: Membuat Manajer Otorisasi Kustom untuk Layanan.
ServiceAuthorizationManager Mengembalikan ServiceAuthorizationManager untuk layanan. ServiceAuthorizationManager bertanggung jawab untuk membuat keputusan otorisasi.
ExternalAuthorizationPolicies Koleksi kebijakan otorisasi kustom yang ditentukan untuk layanan. Kebijakan ini dievaluasi selain kebijakan yang terkait dengan mandat dalam pesan masuk.

Lihat juga