Dela via


Gör så här: Skapa ett anpassat anspråk

Identity Model-infrastrukturen i Windows Communication Foundation (WCF) innehåller en uppsättning inbyggda anspråkstyper och rättigheter med hjälpfunktionerna för att skapa Claim instanser med dessa typer och rättigheter. Dessa inbyggda anspråk är utformade för att modellera information som finns i klientautentiseringstyper som WCF stöder som standard. I många fall är de inbyggda anspråken tillräckliga. vissa program kan dock kräva anpassade anspråk. Ett anspråk består av anspråkstypen, den resurs som anspråket gäller för och den rättighet som hävdas över den resursen. I det här avsnittet beskrivs hur du skapar ett anpassat anspråk.

Skapa ett anpassat anspråk som baseras på en primitiv datatyp

  1. Skapa ett anpassat anspråk genom att skicka anspråkstypen, resursvärdet och rätten till Claim(String, Object, String) konstruktorn.

    1. Bestäm ett unikt värde för anspråkstypen.

      Anspråkstypen är en unik strängidentifierare. Det är den anpassade anspråksdesignerns ansvar att se till att strängidentifieraren som används för anspråkstypen är unik. En lista över anspråkstyper som definieras av WCF finns i ClaimTypes klassen .

    2. Välj den primitiva datatypen och värdet för resursen.

      En resurs är ett objekt. CLR-typen för resursen kan vara en primitiv, till exempel String eller Int32, eller någon serialiserbar typ. CLR-typen för resursen måste vara serialiserbar, eftersom anspråk serialiseras vid olika tidpunkter av WCF. Primitiva typer är serialiserbara.

    3. Välj en rättighet som definieras av WCF eller ett unikt värde för en anpassad rättighet.

      En rättighet är en unik strängidentifierare. De rättigheter som definieras av WCF definieras i Rights klassen .

      Det är den anpassade anspråksdesignerns ansvar att se till att strängidentifieraren som används för rätten är unik.

      I följande kodexempel skapas ett anpassat anspråk med anspråkstypen http://example.org/claims/simplecustomclaim, för en resurs med namnet Driver's Licenseoch med PossessProperty höger.

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

Skapa ett anpassat anspråk som baseras på en icke-primitiv datatyp

  1. Skapa ett anpassat anspråk genom att skicka anspråkstypen, resursvärdet och rätten till Claim(String, Object, String) konstruktorn.

    1. Bestäm ett unikt värde för anspråkstypen.

      Anspråkstypen är en unik strängidentifierare. Det är den anpassade anspråksdesignerns ansvar att se till att strängidentifieraren som används för anspråkstypen är unik. En lista över anspråkstyper som definieras av WCF finns i ClaimTypes klassen .

    2. Välj eller definiera en serialiserbar icke-primitiv typ för resursen.

      En resurs är ett objekt. CLR-typen för resursen måste vara serialiserbar, eftersom anspråk serialiseras vid olika tidpunkter av WCF. Primitiva typer är redan serialiserbara.

      När en ny typ har definierats tillämpar du på DataContractAttribute klassen. Använd DataMemberAttribute även attributet för alla medlemmar av den nya typen som måste serialiseras som en del av anspråket.

      I följande kodexempel definieras en anpassad resurstyp med namnet 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. Välj en rättighet som definieras av WCF eller ett unikt värde för en anpassad rättighet.

      En rättighet är en unik strängidentifierare. De rättigheter som definieras av WCF definieras i Rights klassen .

      Det är den anpassade anspråksdesignerns ansvar att se till att strängidentifieraren som används för rätten är unik.

      I följande kodexempel skapas ett anpassat anspråk med anspråkstypen http://example.org/claims/complexcustomclaim, en anpassad resurstyp av MyResourceTypeoch med PossessProperty höger.

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

Exempel

Följande kodexempel visar hur du skapar ett anpassat anspråk med en primitiv resurstyp och ett anpassat anspråk med en icke-primitiv resurstyp.

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

Se även