Delen via


Procedure: Een aangepaste claim maken

De infrastructuur identiteitsmodel in WCF (Windows Communication Foundation) biedt een set ingebouwde claimtypen en -rechten met de helperfuncties voor het maken van Claim exemplaren met deze typen en rechten. Deze ingebouwde claims zijn ontworpen voor het modelleren van gegevens in clientreferentietypen die WCF standaard ondersteunt. In veel gevallen zijn de ingebouwde claims voldoende; voor sommige toepassingen zijn echter mogelijk aangepaste claims vereist. Een claim bestaat uit het claimtype, de resource waarop de claim van toepassing is en het recht dat wordt toegepast op die resource. In dit onderwerp wordt beschreven hoe u een aangepaste claim maakt.

Een aangepaste claim maken die is gebaseerd op een primitief gegevenstype

  1. Maak een aangepaste claim door het claimtype, de resourcewaarde en het recht op de Claim(String, Object, String) constructor door te geven.

    1. Bepaal een unieke waarde voor het claimtype.

      Het claimtype is een unieke tekenreeks-id. Het is de verantwoordelijkheid van de ontwerpfunctie voor aangepaste claims om ervoor te zorgen dat de tekenreeks-id die wordt gebruikt voor het claimtype uniek is. Zie de ClaimTypes klasse voor een lijst met claimtypen die zijn gedefinieerd door WCF.

    2. Kies het primitieve gegevenstype en de waarde voor de resource.

      Een resource is een object. Het CLR-type van de resource kan een primitieve, zoals String of Int32, of een serialiseerbaar type zijn. Het CLR-type van de resource moet serialiseren zijn, omdat claims op verschillende punten door WCF worden geserialiseerd. Primitieve typen zijn serialiseerbaar.

    3. Kies een recht dat is gedefinieerd door WCF of een unieke waarde voor een aangepast recht.

      Een recht is een unieke tekenreeks-id. De rechten die zijn gedefinieerd door WCF, worden gedefinieerd in de Rights klasse.

      Het is de verantwoordelijkheid van de ontwerpfunctie voor aangepaste claims om ervoor te zorgen dat de tekenreeks-id die voor het recht wordt gebruikt uniek is.

      In het volgende codevoorbeeld wordt een aangepaste claim gemaakt met een claimtype http://example.org/claims/simplecustomclaim, voor een resource met de naam Driver's Licenseen met het PossessProperty recht.

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

Een aangepaste claim maken die is gebaseerd op een niet-primitief gegevenstype

  1. Maak een aangepaste claim door het claimtype, de resourcewaarde en het recht op de Claim(String, Object, String) constructor door te geven.

    1. Bepaal een unieke waarde voor het claimtype.

      Het claimtype is een unieke tekenreeks-id. Het is de verantwoordelijkheid van de ontwerpfunctie voor aangepaste claims om ervoor te zorgen dat de tekenreeks-id die wordt gebruikt voor het claimtype uniek is. Zie de ClaimTypes klasse voor een lijst met claimtypen die zijn gedefinieerd door WCF.

    2. Kies of definieer een serialiseerbaar niet-primitief type voor de resource.

      Een resource is een object. Het CLR-type van de resource moet serialiseren zijn, omdat claims op verschillende punten door WCF worden geserialiseerd. Primitieve typen zijn al serialiseerbaar.

      Wanneer een nieuw type is gedefinieerd, past u de DataContractAttribute klasse toe. Pas ook het DataMemberAttribute kenmerk toe op alle leden van het nieuwe type dat moet worden geserialiseerd als onderdeel van de claim.

      In het volgende codevoorbeeld wordt een aangepast resourcetype met de naam MyResourceTypegedefinieerd.

      [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. Kies een recht dat is gedefinieerd door WCF of een unieke waarde voor een aangepast recht.

      Een recht is een unieke tekenreeks-id. De rechten die zijn gedefinieerd door WCF, worden gedefinieerd in de Rights klasse.

      Het is de verantwoordelijkheid van de ontwerpfunctie voor aangepaste claims om ervoor te zorgen dat de tekenreeks-id die voor het recht wordt gebruikt uniek is.

      In het volgende codevoorbeeld wordt een aangepaste claim gemaakt met een claimtype http://example.org/claims/complexcustomclaim, een aangepast resourcetype van MyResourceTypeen met het PossessProperty recht.

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

Opmerking

In het volgende codevoorbeeld ziet u hoe u een aangepaste claim maakt met een primitief resourcetype en een aangepaste claim met een niet-primitieve resourcetype.

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

Zie ook