Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Programmieren von Windows Communication Foundation (WCF)-Diensten können Sie im Sicherheitskontext des Diensts Details zu den Clientanmeldeinformationen und Ansprüchen ermitteln, die für die Authentifizierung beim Dienst verwendet werden. Dazu werden die Eigenschaften der ServiceSecurityContext Klasse verwendet.
Sie können beispielsweise die Identität des aktuellen Clients abrufen, indem Sie die PrimaryIdentity-Eigenschaft oder die WindowsIdentity-Eigenschaft verwenden. Um festzustellen, ob der Client anonym ist, verwenden Sie die IsAnonymous Eigenschaft.
Sie können auch bestimmen, welche Forderungen im Auftrag des Clients gemacht werden, indem Sie die Sammlung der Forderungen in der AuthorizationContext-Eigenschaft durchsuchen.
So rufen Sie den aktuellen Sicherheitskontext ab
- Greifen Sie auf die statische Eigenschaft Current zu, um den aktuellen Sicherheitskontext abzurufen. Überprüfen Sie eine der Eigenschaften des aktuellen Kontexts aus dem Verweis.
So bestimmen Sie die Identität des Anrufers
- Drucken Sie den Wert der PrimaryIdentity Und WindowsIdentity Eigenschaften.
So analysieren Sie die Ansprüche eines Aufrufers
Gibt die aktuelle AuthorizationContext Klasse zurück. Verwenden Sie die Current-Eigenschaft, um den aktuellen Sicherheitskontext des Diensts zurückzugeben, und geben Sie dann die
AuthorizationContext- und AuthorizationContext-Eigenschaft zurück.Analysieren Sie die Auflistung von ClaimSet Objekten, die von der ClaimSets Eigenschaft der AuthorizationContext Klasse zurückgegeben werden.
Beispiel
Im folgenden Beispiel werden die Werte der WindowsIdentity- und PrimaryIdentity-Eigenschaften des aktuellen Sicherheitskontexts sowie die ClaimType-Eigenschaft, die den Ressourcenwert des Anspruchs beschreibt, und die Right-Eigenschaft jedes Anspruchs im aktuellen Sicherheitskontext ausgegeben.
// 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
Code kompilieren
Der Code verwendet die folgenden Namespaces: