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
Maak een aangepaste claim door het claimtype, de resourcewaarde en het recht op de Claim(String, Object, String) constructor door te geven.
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.
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.
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 naamDriver's License
en 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
Maak een aangepaste claim door het claimtype, de resourcewaarde en het recht op de Claim(String, Object, String) constructor door te geven.
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.
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
MyResourceType
gedefinieerd.[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
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 vanMyResourceType
en 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