ClaimsPrincipalPermission Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mewakili izin yang menggunakan ClaimsAuthorizationManager implementasi untuk menentukan apakah akses ke sumber daya harus diberikan kepada perwakilan aktif. Kelas ini tidak dapat diwariskan.
public ref class ClaimsPrincipalPermission sealed : System::Security::IPermission, System::Security::Permissions::IUnrestrictedPermission
[System.Serializable]
public sealed class ClaimsPrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[<System.Serializable>]
type ClaimsPrincipalPermission = class
interface IPermission
interface ISecurityEncodable
interface IUnrestrictedPermission
Public NotInheritable Class ClaimsPrincipalPermission
Implements IPermission, IUnrestrictedPermission
- Warisan
-
ClaimsPrincipalPermission
- Atribut
- Penerapan
Contoh
Contoh berikut menunjukkan cara melindungi sumber daya dengan menggunakan Demand metode , CheckAccess metode , atau ClaimsPrincipalPermissionAttribute deklarasi . Dalam setiap kasus, yang dikonfigurasi ClaimsAuthorizationManager dipanggil untuk mengevaluasi prinsipal saat ini terhadap sumber daya dan tindakan yang ditentukan. Jika prinsipal saat ini tidak diotorisasi untuk tindakan yang ditentukan pada sumber daya yang ditentukan, SecurityException akan dilemparkan; jika tidak, eksekusi akan dilanjutkan.
using System;
using System.IdentityModel.Services;
using System.Security.Claims;
using System.Security.Permissions;
using System.Threading;
namespace ClaimsBasedAuthorization
{
/// <summary>
/// Program illustrates using Claims-based authorization
/// </summary>
class Program
{
static void Main(string[] args)
{
//
// Method 1. Simple access check using static method.
// Expect this to be most common method.
//
ClaimsPrincipalPermission.CheckAccess("resource", "action");
//
// Method 2. Programmatic check using the permission class
// Follows model found at http://msdn.microsoft.com/library/system.security.permissions.principalpermission.aspx
//
ClaimsPrincipalPermission cpp = new ClaimsPrincipalPermission("resource", "action");
cpp.Demand();
//
// Method 3. Access check interacting directly with the authorization manager.
//
ClaimsAuthorizationManager am = new ClaimsAuthorizationManager();
am.CheckAccess(new AuthorizationContext((ClaimsPrincipal)Thread.CurrentPrincipal, "resource", "action"));
//
// Method 4. Call a method that is protected using the permission attribute class
//
ProtectedMethod();
Console.WriteLine("Press [Enter] to continue.");
Console.ReadLine();
}
//
// Declarative access check using the permission class. The caller must satisfy both demands.
//
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource", Operation = "action")]
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource1", Operation = "action1")]
static void ProtectedMethod()
{
}
}
}
XML berikut menunjukkan konfigurasi minimum yang diperlukan untuk menggunakan manajer otorisasi klaim kustom dengan ClaimsPrincipalPermission kelas . Anda harus, minimal, menyatakan bagian system.identityModel
dan system.identityModel.services
dalam <configSection>
elemen lalu menentukan manajer otorisasi Anda dalam <elemen claimsAuthorizationManager> di bawah konfigurasi identitas default. Ini akan memastikan bahwa manajer otorisasi Anda dirujuk dari konfigurasi federasi default. Atau, Anda dapat menentukan nama konfigurasi identitas tempat manajer otorisasi Anda ditentukan dalam identityConfigurationName
atribut <elemen federationConfiguration> .
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- WIF configuration sections -->
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type ="MyClaimsAuthorizationManager.MyClaimsAuthorizationManager, MyClaimsAuthorizationManager"/>
</identityConfiguration>
</system.identityModel>
</configuration>
Keterangan
Kelas ClaimsPrincipalPermission ini menyediakan kemampuan untuk melakukan pemeriksaan akses imperatif dengan menggunakan yang dikonfigurasi ClaimsAuthorizationManager untuk aplikasi. Dengan memanggil Demand metode atau metode statis CheckAccess , Anda dapat memberikan perlindungan ke sumber daya dari dalam jalur eksekusi kode Anda sesuai dengan kebijakan otorisasi yang ditentukan untuk manajer autentikasi klaim Anda. Pemeriksaan akses deklaratif dapat dilakukan dengan menggunakan ClaimsPrincipalPermissionAttribute kelas .
Penting
Kelas ClaimsPrincipalPermission menggunakan manajer otorisasi klaim yang dikonfigurasi oleh IdentityConfiguration yang diatur di FederatedAuthentication.FederationConfiguration bawah properti . Ini berlaku dalam semua kasus, bahkan dalam skenario di mana WS-Federation tidak digunakan; misalnya, aplikasi Web aktif (WCF) dan aplikasi Konsol. Anda dapat menentukan manajer otorisasi klaim baik dalam konfigurasi atau secara terprogram. Untuk menentukan manajer otorisasi klaim dalam file konfigurasi, atur <elemen claimsAuthorizationManager> di bawah <elemen identityConfiguration> dan pastikan bahwa konfigurasi identitas ini direferensikan oleh <elemen federationConfiguration> yang dimuat oleh runtime (misalnya, dengan mengatur identityConfigurationName
atribut ). Untuk mengatur manajer otorisasi klaim secara terprogram, berikan handler untuk peristiwa tersebut FederatedAuthentication.FederationConfigurationCreated .
Pada satu tingkat, fungsionalitas yang disediakan oleh ClaimsPrincipalPermission mirip dengan pemeriksaan akses berbasis peran (RBAC) yang disediakan melalui PrincipalPermission kelas; namun, ClaimsAuthorizationManager kelas melakukan pemeriksaan berdasarkan klaim yang disajikan oleh prinsipal aktif. Ini memungkinkan granularitas yang jauh lebih banyak daripada yang tersedia melalui RBAC murni, di mana banyak izin biasanya dikumpulkan di bawah satu peran. Mungkin, yang lebih penting, otorisasi berbasis klaim memungkinkan pemisahan logika bisnis dan kebijakan otorisasi yang lebih baik karena izin dapat diminta untuk tindakan tertentu pada sumber daya dalam kode dan kebijakan back-end dapat digunakan untuk mengonfigurasi klaim mana yang harus dimiliki entitas penyajian untuk memenuhi permintaan. Seperti RBAC, ClaimsPrincipalPermission melakukan pemeriksaan akses berbasis pengguna, yaitu, tidak seperti keamanan akses kode yang diterapkan oleh kelas yang berasal dari CodeAccessPermission kelas dan menggunakan stack walk untuk memastikan bahwa semua penelepon kode telah diberikan izin, ClaimsPrincipalPermission melakukan pemeriksaannya hanya pada prinsipal saat ini.
Metode statis CheckAccess memeriksa akses untuk tindakan tertentu pada sumber daya tertentu. Sumber daya dan tindakan adalah string dan biasanya URI. Anda juga dapat menginisialisasi instans ClaimsPrincipalPermission dengan tindakan dan sumber daya dan memanggil Demand metode . Meskipun konstruktor hanya mengambil satu sumber daya dan tindakan, ClaimsPrincipalPermission objek dapat digabungkan melalui Union metode dan Intersect . Izin yang dibuat dengan menggunakan metode ini mungkin berisi beberapa pasangan tindakan sumber daya.
Kedua metode menentukan akses dengan memanggil ClaimsAuthorizationManager.CheckAccess metode manajer otorisasi klaim yang dikonfigurasi dengan yang AuthorizationContext terdiri dari prinsipal aktif (Thread.CurrentPrincipal), sumber daya, dan tindakan. Mereka melempar SecurityException jika prinsipal saat ini tidak berwenang untuk melakukan tindakan pada sumber daya; jika tidak, eksekusi berlanjut.
Dalam kasus ClaimsPrincipalPermission yang berisi beberapa pasangan tindakan sumber daya, ClaimsAuthorizationManager.CheckAccess metode ini dipanggil untuk setiap pasangan tindakan sumber daya yang terkandung dalam izin. Agar panggilan berhasil Demand , perwakilan aktif harus diotorisasi untuk semua pasangan tindakan sumber daya yang terkandung dalam izin.
Konstruktor
ClaimsPrincipalPermission(String, String) |
Membuat instans ClaimsPrincipalPermission baru kelas . |
Metode
CheckAccess(String, String) |
Memeriksa apakah prinsipal saat ini berwenang untuk melakukan tindakan yang ditentukan pada sumber daya yang ditentukan. |
Copy() |
Mengembalikan salinan instans saat ini ClaimsPrincipalPermission . |
Demand() |
Memeriksa apakah prinsipal saat ini diotorisasi untuk pasangan tindakan sumber daya yang terkait dengan instans saat ini. |
Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
FromXml(SecurityElement) |
Merekonstruksi izin saat ini dan statusnya dari pengodean XML yang ditentukan. |
GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
GetType() |
Mendapatkan dari instans Type saat ini. (Diperoleh dari Object) |
Intersect(IPermission) |
Mengembalikan izin yang merupakan persimpangan izin saat ini dan izin yang ditentukan. |
IsSubsetOf(IPermission) |
Mengembalikan nilai yang menunjukkan apakah izin saat ini adalah subset dari izin yang ditentukan. |
IsUnrestricted() |
Mengembalikan nilai yang menunjukkan apakah izin tidak dibatasi. |
MemberwiseClone() |
Membuat salinan dangkal dari saat ini Object. (Diperoleh dari Object) |
ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
ToXml() |
Mengembalikan bentuk xml yang dikodekan dari izin saat ini dan statusnya. |
Union(IPermission) |
Mengembalikan izin baru yang merupakan gabungan izin saat ini dan izin yang ditentukan. ClaimsPrincipalPermission objek yang memiliki semua pasangan tindakan sumber daya yang ada dalam instans saat ini dan instans target. |