Aracılığıyla paylaş


Nasıl yapılır: Özel Beyan Oluşturma

Windows Communication Foundation'daki (WCF) Kimlik Modeli altyapısı, bu tür ve haklarla örnek oluşturmaya Claim yönelik yardımcı işlevlerle bir dizi yerleşik talep türü ve hakkı sağlar. Bu yerleşik talepler, WCF'nin varsayılan olarak desteklediği istemci kimlik bilgisi türlerinde bulunan bilgileri modellemek için tasarlanmıştır. Çoğu durumda yerleşik talepler yeterlidir; ancak bazı uygulamalar özel talepler gerektirebilir. Talep, talep türünden, talebin uygulandığı kaynak ve bu kaynak üzerinde onaylanan haklardan oluşur. Bu konu başlığında özel talebin nasıl oluşturulacağı açıklanmaktadır.

İlkel veri türünü temel alan özel bir talep oluşturmak için

  1. Talep türünü, kaynak değerini ve hakkı oluşturucuya Claim(String, Object, String) geçirerek özel bir talep oluşturun.

    1. Talep türü için benzersiz bir değere karar verin.

      Talep türü benzersiz bir dize tanımlayıcısıdır. Talep türü için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır. WCF tarafından tanımlanan talep türlerinin listesi için sınıfına ClaimTypes bakın.

    2. Kaynak için temel veri türünü ve değerini seçin.

      Kaynak bir nesnedir. Kaynağın CLR türü, veya Int32gibi String ilkel bir tür veya herhangi bir serileştirilebilir tür olabilir. Talepler WCF tarafından çeşitli noktalarda seri hale getirildiğinden kaynağın CLR türü serileştirilebilir olmalıdır. İlkel türler serileştirilebilir.

    3. WCF tarafından tanımlanan bir hakkı veya özel bir sağ için benzersiz bir değer seçin.

      Sağ, benzersiz bir dize tanımlayıcısıdır. WCF tarafından tanımlanan haklar sınıfında Rights tanımlanır.

      Sağ için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır.

      Aşağıdaki kod örneği, adlı Driver's Licenseve sağdaki bir kaynak için talep türüne http://example.org/claims/simplecustomclaimsahip PossessProperty özel bir talep oluşturur.

    // 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)
    

İlkel olmayan bir veri türünü temel alan özel bir talep oluşturmak için

  1. Talep türünü, kaynak değerini ve hakkı oluşturucuya Claim(String, Object, String) geçirerek özel bir talep oluşturun.

    1. Talep türü için benzersiz bir değere karar verin.

      Talep türü benzersiz bir dize tanımlayıcısıdır. Talep türü için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır. WCF tarafından tanımlanan talep türlerinin listesi için sınıfına ClaimTypes bakın.

    2. Kaynak için serileştirilebilir ilkel olmayan bir tür seçin veya tanımlayın.

      Kaynak bir nesnedir. Talepler WCF tarafından çeşitli noktalarda seri hale getirildiğinden kaynağın CLR türü serileştirilebilir olmalıdır. temel türler zaten serileştirilebilir.

      Yeni bir tür tanımlandığında sınıfına uygulayın DataContractAttribute . Ayrıca, talebin DataMemberAttribute bir parçası olarak seri hale getirmesi gereken yeni türün tüm üyelerine özniteliğini uygulayın.

      Aşağıdaki kod örneği adlı MyResourceTypeözel bir kaynak türünü tanımlar.

      [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. WCF tarafından tanımlanan bir hakkı veya özel bir sağ için benzersiz bir değer seçin.

      Sağ, benzersiz bir dize tanımlayıcısıdır. WCF tarafından tanımlanan haklar sınıfında Rights tanımlanır.

      Sağ için kullanılan dize tanımlayıcısının benzersiz olduğundan emin olmak özel talep tasarımcısının sorumluluğundadır.

      Aşağıdaki kod örneği, talep türü , özel kaynak türü http://example.org/claims/complexcustomclaimMyResourceTypeve sağdaki özel PossessProperty bir talep oluşturur.

      // 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)
      

Örnek

Aşağıdaki kod örneği, ilkel kaynak türüne sahip bir özel talep ve ilkel olmayan kaynak türüne sahip bir özel talep oluşturmayı gösterir.

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

Ayrıca bkz.