Vorgehensweise: Erstellen eines benutzerdefinierten AnspruchsHow to: Create a Custom Claim

Die identitätsmodellinfrastruktur in Windows Communication Foundation (WCF) bietet eine Reihe von integrierten Anspruchstypen und-Rechte mit den Hilfsfunktionen zum Erstellen von Claim Instanzen mit diesen Typen und rechten.The Identity Model infrastructure in Windows Communication Foundation (WCF) provides a set of built-in claim types and rights with the helper functions for creating Claim instances with those types and rights. Diese integrierten Ansprüche dienen als Modellinformationen in Client-Anmeldeinformationstypen, die WCF unterstützt standardmäßig gefunden.These built-in claims are designed to model information found in client credential types that WCF supports by default. In vielen Fällen sind die integrierten Ansprüche ausreichend; für einige Anwendungen sind jedoch unter Umständen benutzerdefinierte Ansprüche erforderlich.In many cases, the built-in claims are sufficient; however some applications may require custom claims. Ein Anspruch besteht aus dem Anspruchstyp, der Ressource, für die der Anspruch gilt, und dem Recht, das über diese Ressource gewährt wird.A claim consists of the claim type, the resource for which the claim applies to and the right that is asserted over that resource. In diesem Thema wird beschrieben, wie Sie einen benutzerdefinierten Anspruch erstellen.This topic describes how to create a custom claim.

So erstellen Sie einen benutzerdefinierten Anspruch, der auf einem primitiven Datentyp basiertTo create a custom claim that is based on a primitive data type

  1. Erstellen Sie einen benutzerdefinierten Anspruch, indem Sie den Anspruchstyp, den Ressourcenwert und das Recht dem Claim(String, Object, String)-Konstruktor übergeben.Create a custom claim by passing the claim type, resource value and right to the Claim(String, Object, String) constructor.

    1. Legen Sie einen eindeutigen Wert für den Anspruchstyp fest.Decide on a unique value for the claim type.

      Der Anspruchstyp ist ein eindeutiger Zeichenfolgenbezeichner.The claim type is a unique string identifier. Der Ersteller des benutzerdefinierten Anspruchs ist dafür verantwortlich, dass der für den Anspruchstyp verwendete Zeichenfolgenbezeichner eindeutig ist.It is the custom claim designer's responsibility to ensure that the string identifier that is used for the claim type is unique. Eine Liste von Anspruchstypen, die von WCF definiert sind, finden Sie unter der ClaimTypes Klasse.For a list of claim types that are defined by WCF, see the ClaimTypes class.

    2. Wählen Sie den primitiven Datentyp und den Wert für die Ressource aus.Choose the primitive data type and value for the resource.

      Eine Ressource ist ein Objekt.A resource is an object. Der CLR-Typ der Ressource kann primitiv sein, z. B. String oder Int32, oder ein beliebiger serialisierbarer Typ.The CLR type of the resource can be a primitive, such as String or Int32, or any serializable type. Die CLR-Typ der Ressource muss serialisierbar sein, da Ansprüche von WCF an verschiedenen Punkten serialisiert werden.The CLR type of the resource must be serializable, because claims are serialized at various points by WCF. Primitive Typen sind serialisierbar.Primitive types are serializable.

    3. Wählen Sie ein Recht, die von WCF oder einen eindeutigen Wert für ein benutzerdefiniertes Recht definiert ist.Choose a right that is defined by WCF or a unique value for a custom right.

      Ein Recht ist ein eindeutiger Zeichenfolgenbezeichner.A right is a unique string identifier. Die Rechte, die von WCF definiert sind, werden definiert die Rights Klasse.The rights that are defined by WCF are defined in the Rights class.

      Der Ersteller des benutzerdefinierten Anspruchs ist dafür verantwortlich, dass der für das Recht verwendete Zeichenfolgenbezeichner eindeutig ist.It is the custom claim designer's responsibility to ensure that the string identifier that is used for the right is unique.

      Im folgenden Codebeispiel wird ein benutzerdefinierter Anspruch mit einem Anspruchstyp http://example.org/claims/simplecustomclaim für eine Ressource mit der Bezeichnung Driver's License und mit dem PossessProperty-Recht erstellt.The following code example creates a custom claim with a claim type of http://example.org/claims/simplecustomclaim, for a resource named Driver's License, and with the PossessProperty right.

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

So erstellen Sie einen benutzerdefinierten Anspruch, der auf einem nicht primitiven Datentyp basiertTo create a custom claim that is based on a non-primitive data type

  1. Erstellen Sie einen benutzerdefinierten Anspruch, indem Sie den Anspruchstyp, den Ressourcenwert und das Recht dem Claim(String, Object, String)-Konstruktor übergeben.Create a custom claim by passing the claim type, resource value and right to the Claim(String, Object, String) constructor.

    1. Legen Sie einen eindeutigen Wert für den Anspruchstyp fest.Decide on a unique value for the claim type.

      Der Anspruchstyp ist ein eindeutiger Zeichenfolgenbezeichner.The claim type is a unique string identifier. Der Ersteller des benutzerdefinierten Anspruchs ist dafür verantwortlich, dass der für den Anspruchstyp verwendete Zeichenfolgenbezeichner eindeutig ist.It is the custom claim designer's responsibility to ensure that the string identifier that is used for the claim type is unique. Eine Liste von Anspruchstypen, die von WCF definiert sind, finden Sie unter der ClaimTypes Klasse.For a list of claim types that are defined by WCF, see the ClaimTypes class.

    2. Wählen oder definieren Sie einen serialisierbaren nicht primitiven Typ für die Ressource.Choose or define a serializable non-primitive type for the resource.

      Eine Ressource ist ein Objekt.A resource is an object. Die CLR-Typ der Ressource muss serialisierbar sein, da Ansprüche von WCF an verschiedenen Punkten serialisiert werden.The CLR type of the resource must be serializable, because claims are serialized at various points by WCF. Primitive Typen sind bereits serialisierbar.Primitive types are already serializable.

      Wenden Sie das DataContractAttribute auf die Klasse an, wenn ein neuer Typ definiert wird.When a new type is defined, apply the DataContractAttribute to the class. Wenden Sie auch das DataMemberAttribute-Attribut auf alle Member des neuen Typs an, die als Teil des Anspruchs serialisiert werden müssen.Also apply the DataMemberAttribute attribute to the all members of the new type that need to be serialized as part of the claim.

      Im folgenden Codebeispiel wird ein benutzerdefinierter Ressourcetyp mit der Bezeichnung MyResourceType definiert.The following code example defines a custom resource type named 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 'New
          
          
          Public Sub New(ByVal text As String, ByVal number As Integer) 
              Me.text_value = text
              Me.number = number
          
          End Sub 'New
          
          ' 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 'MyResourceType
      
    3. Wählen Sie ein Recht, die von WCF oder einen eindeutigen Wert für ein benutzerdefiniertes Recht definiert ist.Choose a right that is defined by WCF or a unique value for a custom right.

      Ein Recht ist ein eindeutiger Zeichenfolgenbezeichner.A right is a unique string identifier. Die Rechte, die von WCF definiert sind, werden definiert die Rights Klasse.The rights that are defined by WCF are defined in the Rights class.

      Der Ersteller des benutzerdefinierten Anspruchs ist dafür verantwortlich, dass der für das Recht verwendete Zeichenfolgenbezeichner eindeutig ist.It is the custom claim designer's responsibility to ensure that the string identifier that is used for the right is unique.

      Im folgenden Codebeispiel wird ein benutzerdefinierter Anspruch mit einem Anspruchstyp http://example.org/claims/complexcustomclaim, einem benutzerdefinierten Ressourcentyp MyResourceType und mit dem PossessProperty-Recht erstellt.The following code example creates a custom claim with a claim type of http://example.org/claims/complexcustomclaim, a custom resource type of MyResourceType, and with the PossessProperty right.

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

BeispielExample

Das folgende Codebeispiel veranschaulicht, wie ein benutzerdefinierter Anspruch mit einem primitiven Ressourcentyp und ein benutzerdefinierter Anspruch mit einem nicht primitiven Ressourcentyp erstellt wird.The following code example demonstrates how to create a custom claim with a primitive resource type and a custom claim with a non-primitive resource type.

using System;
using System.IdentityModel.Claims;
using System.Runtime.Serialization;
using System.Security.Permissions;
[assembly: SecurityPermission(
   SecurityAction.RequestMinimum, Execution = true)]
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
Imports System.IdentityModel.Claims
Imports System.Runtime.Serialization
Imports System.Security.Permissions


<assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution := True)>

<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 'New
    
    
    Public Sub New(ByVal text As String, ByVal number As Integer) 
        Me.text_value = text
        Me.number = number
    
    End Sub 'New
    
    ' 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 'MyResourceType

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 'Main
End Class 'Program
' Do something with claims

Siehe auchSee Also

Claim
Rights
ClaimTypes
DataContractAttribute
DataMemberAttribute
Verwalten von Ansprüchen und Autorisierung mit dem IdentitätsmodellManaging Claims and Authorization with the Identity Model
Verwalten von Ansprüchen und Autorisierung mit dem IdentitätsmodellManaging Claims and Authorization with the Identity Model