Útmutató: Egyéni jogcím létrehozása
A Windows Communication Foundation (WCF) identitásmodell-infrastruktúrája beépített jogcímtípusokat és jogosultságokat biztosít a segédfüggvényekkel az ilyen típusú és jogosultságú példányok létrehozásához Claim . Ezek a beépített jogcímek a WCF által alapértelmezés szerint támogatott ügyfél-hitelesítő adatokban található információk modellezésére szolgálnak. A beépített jogcímek sok esetben elegendőek; egyes alkalmazások azonban egyéni jogcímeket igényelhetnek. A jogcímek a jogcím típusából, az erőforrásból, amelyre a jogcím vonatkozik, és az adott erőforrásra érvényesített jogból állnak. Ez a témakör bemutatja, hogyan hozhat létre egyéni jogcímet.
Primitív adattípuson alapuló egyéni jogcím létrehozása
Egyéni jogcím létrehozása a jogcímtípus, az erőforrásérték és a Claim(String, Object, String) jogosultság konstruktornak való átadásával.
Döntse el a jogcímtípus egyedi értékét.
A jogcím típusa egy egyedi sztringazonosító. Az egyéni jogcímtervező feladata annak biztosítása, hogy a jogcímtípushoz használt sztringazonosító egyedi legyen. A WCF által definiált jogcímtípusok listáját az ClaimTypes osztályban találja.
Válassza ki az erőforrás primitív adattípusát és értékét.
Az erőforrás egy objektum. Az erőforrás CLR-típusa lehet primitív, például String vagy Int32, vagy bármilyen szerializálható típus. Az erőforrás CLR-típusának szerializálhatónak kell lennie, mivel a jogcímeket a WCF különböző pontokon szerializálja. A primitív típusok szerializálhatók.
Válasszon egy, a WCF által definiált jogot, vagy egy egyéni jog egyedi értékét.
A jobb oldali érték egy egyedi sztringazonosító. A WCF által meghatározott jogosultságok az Rights osztályban vannak definiálva.
Az egyéni jogcímtervező feladata annak biztosítása, hogy a joghoz használt sztringazonosító egyedi legyen.
Az alábbi példakód egy egyéni jogcímet hoz létre egy jogcímtípussal
http://example.org/claims/simplecustomclaim
, egy elnevezettDriver's License
erőforráshoz, és jobbra 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)
Nem primitív adattípuson alapuló egyéni jogcím létrehozása
Egyéni jogcím létrehozása a jogcímtípus, az erőforrásérték és a Claim(String, Object, String) jogosultság konstruktornak való átadásával.
Döntse el a jogcímtípus egyedi értékét.
A jogcím típusa egy egyedi sztringazonosító. Az egyéni jogcímtervező feladata annak biztosítása, hogy a jogcímtípushoz használt sztringazonosító egyedi legyen. A WCF által definiált jogcímtípusok listáját az ClaimTypes osztályban találja.
Az erőforrás szerializálható nem primitív típusának kiválasztása vagy definiálása.
Az erőforrás egy objektum. Az erőforrás CLR-típusának szerializálhatónak kell lennie, mivel a jogcímeket a WCF különböző pontokon szerializálja. A primitív típusok már szerializálhatók.
Új típus definiálásakor alkalmazza az DataContractAttribute osztályra. Alkalmazza az DataMemberAttribute attribútumot az új típus minden olyan tagjára, amelyet szerializálni kell a jogcím részeként.
Az alábbi példakód egy egyéni erőforrástípust
MyResourceType
határoz meg.[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
Válasszon egy, a WCF által definiált jogot, vagy egy egyéni jog egyedi értékét.
A jobb oldali érték egy egyedi sztringazonosító. A WCF által meghatározott jogosultságok az Rights osztályban vannak definiálva.
Az egyéni jogcímtervező feladata annak biztosítása, hogy a joghoz használt sztringazonosító egyedi legyen.
Az alábbi példakód egy egyéni jogcímet hoz létre egy jogcímtípussal
http://example.org/claims/complexcustomclaim
, egy egyéni erőforrástípussalMyResourceType
és egy PossessProperty jobb gombbal.// 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élda
Az alábbi példakód bemutatja, hogyan hozhat létre egyéni jogcímet primitív erőforrástípussal és nem primitív erőforrástípussal rendelkező egyéni jogcímet.
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