Delen via


Procedure: De beveiligingscontext onderzoeken

Wanneer u WCF-services (Windows Communication Foundation) programmeert, kunt u met de beveiligingscontext van de service details bepalen over de clientreferenties en claims die worden gebruikt voor verificatie met de service. Dit wordt gedaan met behulp van de eigenschappen van de ServiceSecurityContext klasse.

U kunt bijvoorbeeld de identiteit van de huidige client ophalen met behulp van de PrimaryIdentity eigenschap of de WindowsIdentity eigenschap. Gebruik de IsAnonymous eigenschap om te bepalen of de client anoniem is.

U kunt ook bepalen welke claims namens de klant worden gedaan door de verzameling claims in de AuthorizationContext eigenschap te doorlopen.

De huidige beveiligingscontext ophalen

  • Open de statische eigenschap Current om de huidige beveiligingscontext op te halen. Bekijk een van de eigenschappen van de huidige context uit de verwijzing.

De identiteit van de beller bepalen

  1. De waarde van de PrimaryIdentity en WindowsIdentity eigenschappen afdrukken.

De claims van een beller parseren

  1. De huidige AuthorizationContext klasse retourneren. Gebruik de Current eigenschap om de huidige servicebeveiligingscontext te retourneren en retourneer vervolgens de AuthorizationContext eigenschap met behulp van de AuthorizationContext eigenschap.

  2. Parseer de verzameling objecten die ClaimSet worden geretourneerd door de ClaimSets eigenschap van de AuthorizationContext klasse.

Opmerking

In het volgende voorbeeld worden de waarden van de WindowsIdentity huidige beveiligingscontext en PrimaryIdentity de ClaimType eigenschap, de resourcewaarde van de claim en de Right eigenschap van elke claim in de huidige beveiligingscontext afgedrukt.

// Run this method from within a method protected by the PrincipalPermissionAttribute
// to see the security context data, including the primary identity.
public void WriteServiceSecurityContextData(string fileName)
{
    using (StreamWriter sw = new StreamWriter(fileName))
    {
        // Write the primary identity and Windows identity. The primary identity is derived from
        // the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name);
        sw.WriteLine();
        // Write the claimsets in the authorization context. By default, there is only one claimset
        // provided by the system.
        foreach (ClaimSet claimset in ServiceSecurityContext.Current.AuthorizationContext.ClaimSets)
        {
            foreach (Claim claim in claimset)
            {
                // Write out each claim type, claim value, and the right. There are two
                // possible values for the right: "identity" and "possessproperty".
                sw.WriteLine("Claim Type = {0}", claim.ClaimType);
                sw.WriteLine("\t Resource = {0}", claim.Resource.ToString());
                sw.WriteLine("\t Right = {0}", claim.Right);
            }
        }
    }
}

' Run this method from within a method protected by the PrincipalPermissionAttribute
' to see the security context data, including the primary identity.
Public Sub WriteServiceSecurityContextData(ByVal fileName As String)
    Dim sw As New StreamWriter(fileName)
    Try
        ' Write the primary identity and Windows identity. The primary identity is derived from 
        ' the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name)
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name)
        sw.WriteLine()
        ' Write the claimsets in the authorization context. By default, there is only one claimset
        ' provided by the system. 
        Dim claimset As ClaimSet
        For Each claimset In ServiceSecurityContext.Current.AuthorizationContext.ClaimSets
            Dim claim As Claim
            For Each claim In claimset
                ' Write out each claim type, claim value, and the right. There are two
                ' possible values for the right: "identity" and "possessproperty". 
                sw.WriteLine("Claim Type = {0}", claim.ClaimType)
                sw.WriteLine(vbTab + " Resource = {0}", claim.Resource.ToString())
                sw.WriteLine(vbTab + " Right = {0}", claim.Right)
            Next claim
        Next claimset
    Finally
        sw.Dispose()
    End Try

End Sub

De code compileren

De code maakt gebruik van de volgende naamruimten:

Zie ook