Postupy: Vytvoření vlastní deklarace identity

Infrastruktura modelu identity ve Windows Communication Foundation (WCF) poskytuje sadu předdefinovaných typů deklarací identity a práv s pomocnými funkcemi pro vytváření Claim instancí s těmito typy a právy. Tyto předdefinované deklarace identity jsou navržené tak, aby modelovat informace nalezené v typech přihlašovacích údajů klienta, které WCF ve výchozím nastavení podporuje. V mnoha případech jsou předdefinované deklarace identity dostatečné; některé aplikace však mohou vyžadovat vlastní deklarace identity. Deklarace identity se skládá z typu deklarace identity, prostředku, pro který se deklarace identity vztahuje, a práva, která se u tohoto prostředku uplatňuje. Toto téma popisuje, jak vytvořit vlastní deklaraci identity.

Vytvoření vlastní deklarace identity založené na primitivním datovém typu

  1. Vytvořte vlastní deklaraci identity předáním typu deklarace identity, hodnoty prostředku a práva konstruktoru Claim(String, Object, String) .

    1. Rozhodněte se o jedinečné hodnotě pro typ deklarace identity.

      Typ deklarace identity je jedinečný identifikátor řetězce. Je zodpovědností vlastního návrháře deklarací identity, aby byl identifikátor řetězce, který se používá pro typ deklarace identity, jedinečný. Seznam typů deklarací identity, které jsou definovány WCF, naleznete v ClaimTypes třídě.

    2. Zvolte primitivní datový typ a hodnotu prostředku.

      Prostředek je objekt. Typ CLR prostředku může být primitivní, například String nebo Int32nebo jakýkoli serializovatelný typ. Typ CLR prostředku musí být serializovatelný, protože deklarace identity jsou serializovány v různých bodech WCF. Primitivní typy jsou serializovatelné.

    3. Zvolte právo, které je definováno WCF nebo jedinečnou hodnotou pro vlastní právo.

      Právo je jedinečný identifikátor řetězce. Práva definovaná WCF jsou definována ve Rights třídě.

      Je zodpovědností vlastního návrháře deklarací identity, aby byl identifikátor řetězce, který se používá pro právo, jedinečný.

      Následující příklad kódu vytvoří vlastní deklaraci identity s typem http://example.org/claims/simplecustomclaimdeklarace identity , pro prostředek s názvem Driver's Licensea vpravo 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)
    

Vytvoření vlastní deklarace identity založené na nemitivitivovém datovém typu

  1. Vytvořte vlastní deklaraci identity předáním typu deklarace identity, hodnoty prostředku a práva konstruktoru Claim(String, Object, String) .

    1. Rozhodněte se o jedinečné hodnotě pro typ deklarace identity.

      Typ deklarace identity je jedinečný identifikátor řetězce. Je zodpovědností vlastního návrháře deklarací identity, aby byl identifikátor řetězce, který se používá pro typ deklarace identity, jedinečný. Seznam typů deklarací identity, které jsou definovány WCF, naleznete v ClaimTypes třídě.

    2. Zvolte nebo definujte serializovatelný nemitivitivový typ prostředku.

      Prostředek je objekt. Typ CLR prostředku musí být serializovatelný, protože deklarace identity jsou serializovány v různých bodech WCF. Primitivní typy jsou již serializovatelné.

      Pokud je definován nový typ, použijte u DataContractAttribute třídy. Také použijte DataMemberAttribute atribut pro všechny členy nového typu, které musí být serializovány jako součást deklarace identity.

      Následující příklad kódu definuje vlastní typ prostředku s názvem 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. Zvolte právo, které je definováno WCF nebo jedinečnou hodnotou pro vlastní právo.

      Právo je jedinečný identifikátor řetězce. Práva definovaná WCF jsou definována ve Rights třídě.

      Je zodpovědností vlastního návrháře deklarací identity, aby byl identifikátor řetězce, který se používá pro právo, jedinečný.

      Následující příklad kódu vytvoří vlastní deklaraci identity s typem http://example.org/claims/complexcustomclaimdeklarace identity , vlastní typ MyResourceTypeprostředku , a se PossessProperty správnými.

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

Příklad

Následující příklad kódu ukazuje, jak vytvořit vlastní deklaraci identity s primitivním typem prostředku a vlastní deklarací identity s jiným než primitivním typem prostředku.

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

Viz také