Bagikan melalui


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

  1. Buat klaim kustom dengan meneruskan jenis klaim, nilai sumber daya, dan hak ke konstruktor Claim(String, Object, String).

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

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

    3. 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 bernama Driver'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

  1. Buat klaim kustom dengan meneruskan jenis klaim, nilai sumber daya, dan hak ke konstruktor Claim(String, Object, String).

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

    2. 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
      
    3. 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 daya MyResourceType, 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

Lihat juga