Cara: Membatasi Akses dengan Kelas PrincipalPermissionAttribute Class
Mengontrol akses ke sumber daya di komputer domain Windows adalah tugas keamanan dasar. Misalnya, hanya pengguna tertentu yang dapat melihat data sensitif, seperti informasi penggajian. Topik ini menjelaskan cara membatasi akses ke suatu metode dengan menuntut agar pengguna masuk dalam grup yang telah ditentukan. Untuk mengetahui sampel yang berfungsi, lihat Mengizinkan Akses ke Operasi Layanan.
Tugas ini terdiri dari dua prosedur terpisah. Yang pertama membuat grup dan memasukkan pengguna ke dalamnya. Yang kedua menerapkan kelas PrincipalPermissionAttribute untuk menentukan grup.
Untuk membuat grup Windows
Buka konsol Manajemen Komputer.
Di panel kiri, klik Grup dan Pengguna Lokal.
Klik kanan Grup, lalu klik Grup Baru.
Di kotak Nama Grup, ketik nama untuk grup baru.
Di kotak Deskripsi, ketik deskripsi grup baru.
Klik tombol Tambahkan untuk menambahkan anggota baru ke grup.
Jika telah menambahkan diri sendiri ke grup dan ingin menguji kode berikut, Anda harus keluar dari komputer dan masuk kembali untuk dimasukkan dalam grup.
Untuk meminta keanggotaan pengguna
Buka file kode Windows Communication Foundation (WCF) yang berisi kode kontrak layanan yang diimplementasikan. Untuk informasi selengkapnya tentang mengimplementasikan kontrak, lihat Mengimplementasikan Kontrak Layanan.
Terapkan atribut PrincipalPermissionAttribute ke setiap metode yang harus dibatasi ke grup spesifik. Atur properti Action ke Demand dan properti Role ke nama grup. Contoh:
// Only members of the CalculatorClients group can call this method. [PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")] public double Add(double a, double b) { return a + b; }
' Only members of the CalculatorClients group can call this method. <PrincipalPermission(SecurityAction.Demand, Role:="CalculatorClients")> _ Public Function Add(ByVal a As Double, ByVal b As Double) As Double Return a + b End Function
Catatan
Jika Anda menerapkan atribut PrincipalPermissionAttribute ke kontrak, SecurityException akan ditampilkan. Anda hanya dapat menerapkan atribut di tingkat metode.
Menggunakan Sertifikat untuk Mengontrol Akses ke Metode
Anda juga dapat menggunakan kelas PrincipalPermissionAttribute
untuk mengontrol akses ke metode jika jenis kredensial klien adalah sertifikat. Untuk melakukannya, Anda harus memiliki subjek sertifikat dan thumbprint.
Untuk memeriksa sertifikat untuk propertinya, lihat Cara: Menampilkan Sertifikat dengan Snap-in MMC. Untuk menemukan nilai thumbprint, lihat Cara: Mengambil Thumbprint Sertifikat.
Untuk mengontrol akses menggunakan sertifikat
Terapkan kelas PrincipalPermissionAttribute ke metode yang ingin Anda batasi aksesnya.
Atur tindakan atribut ke SecurityAction.Demand.
Atur properti
Name
ke string yang terdiri dari nama subjek dan thumbprint sertifikat. Pisahkan dua nilai dengan titik koma dan spasi, seperti yang ditunjukkan pada contoh berikut:// Only a client authenticated with a valid certificate that has the // specified subject name and thumbprint can call this method. [PrincipalPermission(SecurityAction.Demand, Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")] public double Multiply(double a, double b) { return a * b; }
' Only a client authenticated with a valid certificate that has the ' specified subject name and thumbprint can call this method. <PrincipalPermission(SecurityAction.Demand, Name:="CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")> _ Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double Return a * b End Function
Atur PrincipalPermissionMode properti teks ke UseAspNetRoles seperti yang ditunjukkan pada contoh berikut:
<behaviors> <serviceBehaviors> <behavior name="SvcBehavior1"> <serviceAuthorization principalPermissionMode="UseAspNetRoles" /> </behavior> </serviceBehaviors> </behaviors>
Mengatur nilai ini ke
UseAspNetRoles
menunjukkan bahwa propertiName
dariPrincipalPermissionAttribute
akan digunakan untuk melakukan perbandingan string. Saat sertifikat digunakan sebagai kredensial klien, WCF secara default menggabungkan nama umum sertifikat dan thumbprint dengan titik koma untuk membuat nilai unik untuk identitas utama klien. DenganUseAspNetRoles
yang ditetapkan sebagaiPrincipalPermissionMode
di layanan, nilai identitas utama ini dibandingkan dengan nilai propertiName
untuk menentukan hak akses pengguna.Atau, saat membuat layanan yang dihosting sendiri, atur properti PrincipalPermissionMode dalam kode seperti yang ditunjukkan dalam kode berikut:
ServiceHost myServiceHost = new ServiceHost(typeof(Calculator), baseUri); ServiceAuthorizationBehavior myServiceBehavior = myServiceHost.Description.Behaviors.Find<ServiceAuthorizationBehavior>(); myServiceBehavior.PrincipalPermissionMode = PrincipalPermissionMode.UseAspNetRoles;
Dim myServiceBehavior As ServiceAuthorizationBehavior myServiceBehavior = _ myServiceHost.Description.Behaviors.Find(Of ServiceAuthorizationBehavior)() myServiceBehavior.PrincipalPermissionMode = _ PrincipalPermissionMode.UseAspNetRoles