Cara: Membuat Klaim Kustom
Infrastruktur Model Identitas di WCF menyediakan serangkaian jenis dan hak klaim bawaan dengan fungsi pembantu untuk membuat instans Claim dengan jenis dan hak tersebut. Klaim bawaan ini dirancang untuk memodelkan informasi yang ditemukan dalam jenis mandat klien yang didukung WCF secara default. Dalam banyak kasus, klaim bawaan saja sudah cukup; namun beberapa aplikasi mungkin memerlukan klaim khusus. Klaim terdiri dari jenis klaim, sumber daya yang menjadi tujuan klaim, dan hak yang diklaim atas sumber daya tersebut. Topik ini menjelaskan cara membuat klaim kustom.
Untuk membuat klaim kustom yang didasarkan pada jenis data primitif
Buat klaim kustom dengan meneruskan jenis klaim, nilai sumber daya, dan hak ke konstruktor Claim(String, Object, String).
Tentukan nilai unik untuk jenis klaim.
Jenis klaim adalah pengidentifikasi string yang unik. Merupakan tanggung jawab perancang klaim kustom untuk memastikan bahwa pengidentifikasi string yang digunakan untuk jenis klaim bersifat unik. Untuk daftar jenis klaim yang ditentukan oleh WCF, lihat kelas ClaimTypes.
Pilih jenis data primitif dan nilai untuk sumber daya.
Sumber daya adalah objek. Jenis CLR sumber daya dapat berupa jenis primitif, seperti String atau Int32, atau jenis yang dapat diserialisasikan. Jenis sumber daya CLR harus dapat diserialkan, karena klaim akan diserialkan di berbagai titik oleh WCF. Jenis primitif dapat diserialkan.
Pilih hak yang ditentukan oleh WCF atau nilai unik untuk hak kustom.
Hak adalah pengidentifikasi string yang unik. Hak yang ditentukan oleh WCF ditentukan dalam kelas Rights.
Merupakan tanggung jawab perancang klaim kustom untuk memastikan bahwa pengidentifikasi string yang digunakan untuk hak bersifat unik.
Contoh kode berikut membuat klaim kustom dengan jenis klaim
http://example.org/claims/simplecustomclaim
, untuk sumber daya bernamaDriver's License
, dan dengan hak PossessProperty.
// Create claim with custom claim type and primitive resource Claim c1 = new Claim ( "http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty);
' Create claim with custom claim type and primitive resource Dim c1 As New Claim("http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty)
Untuk membuat klaim kustom yang didasarkan pada jenis data non-primitif
Buat klaim kustom dengan meneruskan jenis klaim, nilai sumber daya, dan hak ke konstruktor Claim(String, Object, String).
Tentukan nilai unik untuk jenis klaim.
Jenis klaim adalah pengidentifikasi string yang unik. Merupakan tanggung jawab perancang klaim kustom untuk memastikan bahwa pengidentifikasi string yang digunakan untuk jenis klaim bersifat unik. Untuk daftar jenis klaim yang ditentukan oleh WCF, lihat kelas ClaimTypes.
Pilih atau tentukan jenis non-primitif yang dapat diserialkan untuk sumber daya.
Sumber daya adalah objek. Jenis sumber daya CLR harus dapat diserialkan, karena klaim akan diserialkan di berbagai titik oleh WCF. Jenis primitif sudah dapat diserialkan.
Saat jenis baru ditentukan, terapkan DataContractAttribute ke kelas. Terapkan juga atribut DataMemberAttribute ke semua anggota jenis baru yang perlu diserialkan sebagai bagian dari klaim.
Contoh kode berikut menentukan jenis sumber daya kustom bernama
MyResourceType
.[DataContract(Name="MyResource", Namespace="http://example.org/resources")] public sealed class MyResourceType { // private members private string text; private int number; // Constructors public MyResourceType() { } public MyResourceType(string text, int number ) { this.text = text; this.number = number; } // Public properties [DataMember] public string Text { get { return this.text; } set { this.text = value; } } [DataMember] public int Number { get { return this.number; } set { this.number = value; } } }
<DataContract(Name:="MyResource", [Namespace]:="http://example.org/resources")> _ NotInheritable Public Class MyResourceType ' private members Private text_value As String Private number_value As Integer ' Constructors Public Sub New() End Sub Public Sub New(ByVal text As String, ByVal number As Integer) Me.text_value = text Me.number = number End Sub ' Public properties <DataMember()> _ Public Property Text() As String Get Return Me.text_value End Get Set Me.text_value = value End Set End Property <DataMember()> _ Public Property Number() As Integer Get Return Me.number_value End Get Set Me.number_value = value End Set End Property End Class
Pilih hak yang ditentukan oleh WCF atau nilai unik untuk hak kustom.
Hak adalah pengidentifikasi string yang unik. Hak yang ditentukan oleh WCF ditentukan dalam kelas Rights.
Merupakan tanggung jawab perancang klaim kustom untuk memastikan bahwa pengidentifikasi string yang digunakan untuk hak bersifat unik.
Contoh kode berikut membuat klaim kustom dengan jenis klaim
http://example.org/claims/complexcustomclaim
,jenis sumber dayaMyResourceType
, dan dengan hak PossessProperty.// Create claim with custom claim type and structured resource type Claim c2 = new Claim ( "http://example.org/claims/complexcustomclaim", new MyResourceType ( "Martin", 38 ), Rights.PossessProperty);
' Create claim with custom claim type and structured resource type Dim c2 As New Claim("http://example.org/claims/complexcustomclaim", New MyResourceType("Martin", 38), Rights.PossessProperty)
Contoh
Contoh kode berikut menunjukkan cara membuat klaim kustom dengan jenis sumber daya primitif dan klaim kustom dengan jenis sumber daya non-primitif.
using System;
using System.IdentityModel.Claims;
using System.Runtime.Serialization;
namespace Samples
{
[DataContract(Name="MyResource", Namespace="http://example.org/resources")]
public sealed class MyResourceType
{
// private members
private string text;
private int number;
// Constructors
public MyResourceType()
{
}
public MyResourceType(string text, int number )
{
this.text = text;
this.number = number;
}
// Public properties
[DataMember]
public string Text { get { return this.text; } set { this.text = value; } }
[DataMember]
public int Number { get { return this.number; } set { this.number = value; } }
}
class Program
{
public static void Main()
{
// Create claim with custom claim type and primitive resource
Claim c1 = new Claim ( "http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty);
// Create claim with custom claim type and structured resource type
Claim c2 = new Claim ( "http://example.org/claims/complexcustomclaim", new MyResourceType ( "Martin", 38 ), Rights.PossessProperty);
// Do something with claims
}
}
}
Imports System.IdentityModel.Claims
Imports System.Runtime.Serialization
Imports System.Security.Permissions
<DataContract(Name:="MyResource", [Namespace]:="http://example.org/resources")> _
NotInheritable Public Class MyResourceType
' private members
Private text_value As String
Private number_value As Integer
' Constructors
Public Sub New()
End Sub
Public Sub New(ByVal text As String, ByVal number As Integer)
Me.text_value = text
Me.number = number
End Sub
' Public properties
<DataMember()> _
Public Property Text() As String
Get
Return Me.text_value
End Get
Set
Me.text_value = value
End Set
End Property
<DataMember()> _
Public Property Number() As Integer
Get
Return Me.number_value
End Get
Set
Me.number_value = value
End Set
End Property
End Class
Class Program
Public Shared Sub Main()
' Create claim with custom claim type and primitive resource
Dim c1 As New Claim("http://example.org/claims/simplecustomclaim", "Driver's License", Rights.PossessProperty)
' Create claim with custom claim type and structured resource type
Dim c2 As New Claim("http://example.org/claims/complexcustomclaim", New MyResourceType("Martin", 38), Rights.PossessProperty)
End Sub
End Class
' Do something with claims