Vorgehensweise: Prüfen des SicherheitskontextsHow to: Examine the Security Context

Beim Programmieren von Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Diensten können Sie mit dem Dienstsicherheitskontext genaue Informationen über die Clientanmeldeinformationen und Ansprüche bestimmen, die für die Authentifizierung des Diensts benötigt werden.When programming Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) services, the service security context enables you to determine details about the client credentials and claims used to authenticate with the service. Dies geschieht anhand der Eigenschaften der ServiceSecurityContext-Klasse.This is done by using the properties of the ServiceSecurityContext class.

So können Sie z. B. die Identität des aktuellen Clients mit der PrimaryIdentity-Eigenschaft oder der WindowsIdentity-Eigenschaft abrufen.For example, you can retrieve the identity of the current client by using the PrimaryIdentity or the WindowsIdentity property. Mit der IsAnonymous-Eigenschaft können Sie ermitteln, ob der Client anonym ist.To determine whether the client is anonymous, use the IsAnonymous property.

Sie können auch bestimmen, welche Ansprüche im Namen des Clients gestellt werden, indem Sie die Auflistung der Ansprüche der AuthorizationContext-Eigenschaft durchlaufen.You can also determine what claims are being made on behalf of the client by iterating through the collection of claims in the AuthorizationContext property.

So rufen Sie den aktuellen Sicherheitskontext abTo get the current security context

  • Greifen Sie auf die statische Current- Eigenschaft zu, um den aktuellen Sicherheitskontext abzurufen.Access the static property Current to get the current security context. Überprüfen Sie eine beliebige der Eigenschaften des aktuellen Kontexts für den Verweis.Examine any of the properties of the current context from the reference.

So ermitteln Sie die Identität des AufrufersTo determine the identity of the caller

  1. Drucken Sie den Wert der PrimaryIdentity-Eigenschaft und der WindowsIdentity-Eigenschaft.Print the value of the PrimaryIdentity and WindowsIdentity properties.

So analysieren Sie die Ansprüche eines AufrufersTo parse the claims of a caller

  1. Geben Sie die aktuelle AuthorizationContext-Klasse zurück.Return the current AuthorizationContext class. Verwenden Sie die Current-Eigenschaft, um den aktuellen Dienstsicherheitskontext zurückzugeben, geben Sie dann den AuthorizationContext mit der AuthorizationContext-Eigenschaft zurück.Use the Current property to return the current service security context, then return the AuthorizationContext using the AuthorizationContext property.

  2. Analysieren Sie die Auflistung der ClaimSet-Objekte, die von der ClaimSets-Eigenschaft der AuthorizationContext-Klasse zurückgegeben werden.Parse the collection of ClaimSet objects returned by the ClaimSets property of the AuthorizationContext class.

BeispielExample

Im folgenden Beispiel werden die Werte der WindowsIdentity-Eigenschaft und der PrimaryIdentity-Eigenschaft des aktuellen Sicherheitskontexts und der ClaimType-Eigenschaft gedruckt sowie der Ressourcenwert des Anspruchs und die Right-Eigenschaft jedes Anspruchs im aktuellen Sicherheitskontext.The following example prints the values of the WindowsIdentity and PrimaryIdentity properties of the current security context and the ClaimType property, the resource value of the claim, and the Right property of every claim in the current security context.

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

Kompilieren des CodesCompiling the Code

Der Code verwendet die folgenden Namespaces:The code uses the following namespaces:

Siehe auchSee Also

Sichern von DienstenSecuring Services
Dienstidentität und AuthentifizierungService Identity and Authentication