Bagikan melalui


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

  1. Buka konsol Manajemen Komputer.

  2. Di panel kiri, klik Grup dan Pengguna Lokal.

  3. Klik kanan Grup, lalu klik Grup Baru.

  4. Di kotak Nama Grup, ketik nama untuk grup baru.

  5. Di kotak Deskripsi, ketik deskripsi grup baru.

  6. Klik tombol Tambahkan untuk menambahkan anggota baru ke grup.

  7. 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

  1. Buka file kode Windows Communication Foundation (WCF) yang berisi kode kontrak layanan yang diimplementasikan. Untuk informasi selengkapnya tentang mengimplementasikan kontrak, lihat Mengimplementasikan Kontrak Layanan.

  2. 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

  1. Terapkan kelas PrincipalPermissionAttribute ke metode yang ingin Anda batasi aksesnya.

  2. Atur tindakan atribut ke SecurityAction.Demand.

  3. 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
    
  4. 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 properti Name dari PrincipalPermissionAttribute 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. Dengan UseAspNetRoles yang ditetapkan sebagai PrincipalPermissionMode di layanan, nilai identitas utama ini dibandingkan dengan nilai properti Name 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
    

Lihat juga