Comment : examiner le contexte de sécurité
Lorsque vous programmez des services Windows Communication Foundation (WCF), le contexte de sécurité vous permet de déterminer les détails relatifs aux informations d'identification du client et les revendications utilisées pour authentifier avec le service. Pour ce faire, utilisez les propriétés de la classe ServiceSecurityContext.
Par exemple, vous pouvez récupérer l'identité du client actuel en utilisant la propriété PrimaryIdentity ou WindowsIdentity. Pour déterminer si le client est ou non anonyme, utilisez la propriété IsAnonymous.
Vous pouvez également déterminer les revendications effectuées pour le compte du client en effectuant une itération dans la collection de revendications de la propriété AuthorizationContext.
Pour obtenir le contexte de sécurité actuel
- Accédez à la propriété Current statique pour obtenir le contexte de sécurité actuel. Examinez chacune des propriétés du contexte actuel à partir de la référence.
Pour déterminer l'identité de l'appelant
- Imprimez la valeur des propriétés PrimaryIdentity et WindowsIdentity.
Pour analyser les revendications d'un appelant
Retournez la classe actuelle AuthorizationContext. Utilisez la propriété Current pour retourner le contexte de sécurité des services actuel, puis retournez AuthorizationContext à l'aide de la propriété AuthorizationContext.
Analysez la collection d'objets ClaimSet retournés par la propriété ClaimSets de la classe AuthorizationContext.
Exemple
L'exemple suivant imprime les valeurs des propriétés WindowsIdentity et PrimaryIdentity du contexte de sécurité actuel ainsi que la propriété ClaimType, la valeur de ressource de la revendication et la propriété Right de chaque revendication du contexte de sécurité actuel.
' 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
// 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);
}
}
}
}
Compilation du code
Le code utilise les espaces de noms suivants :
Voir aussi
Concepts
Sécurisation de services
Identité du service et authentification