Partager via


ServiceSecurityContext Classe

Définition

Représente le contexte de sécurité d'un tiers distant. Côté client, représente l'identité de service et, côté service, représente l'identité du client.

public ref class ServiceSecurityContext
public class ServiceSecurityContext
type ServiceSecurityContext = class
Public Class ServiceSecurityContext
Héritage
ServiceSecurityContext

Exemples

L'exemple suivant utilise la classe ServiceSecurityContext pour fournir des informations sur le contexte de sécurité actuel. Le code crée une instance de la classe StreamWriter pour écrire les informations dans un fichier.

// When this method runs, the caller must be an authenticated user
// and the ServiceSecurityContext is not a null instance.
public double Add(double n1, double n2)
{
    // Write data from the ServiceSecurityContext to a file using the StreamWriter class.
    using (StreamWriter sw = new StreamWriter(@"c:\ServiceSecurityContextInfo.txt"))
    {
        // 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);

        // 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}, Resource: {1} Right: {2}",
                    claim.ClaimType,
                    claim.Resource.ToString(),
                    claim.Right);
                sw.WriteLine();
            }
        }
    }
    return n1 + n2;
}
' When this method runs, the caller must be an authenticated user and the ServiceSecurityContext 
' is not a null instance. 
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
    ' Write data from the ServiceSecurityContext to a file using the StreamWriter class.
    Dim sw As New StreamWriter("c:\ServiceSecurityContextInfo.txt")
    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)

        ' 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}, Resource: {1} Right: {2}", _
                claim.ClaimType, _
                claim.Resource.ToString(), _
                claim.Right)
                sw.WriteLine()
            Next claim
        Next claimset
    Finally
        sw.Dispose()
    End Try
    Return n1 + n2
End Function

L'exemple suivant présente une implémentation de la méthode CheckAccessCore qui utilise le ServiceSecurityContext pour analyser un ensemble de revendications.

public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {
        // Extract the action URI from the OperationContext. Match this against the claims
        // in the AuthorizationContext.
        string action = operationContext.RequestContext.RequestMessage.Headers.Action;
        Console.WriteLine("action: {0}", action);

        // Iterate through the various claimsets in the AuthorizationContext.
        foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
        {
            // Examine only those claim sets issued by System.
            if (cs.Issuer == ClaimSet.System)
            {
                // Iterate through claims of type "http://example.org/claims/allowedoperation".
                foreach (Claim c in cs.FindClaims("http://example.org/claims/allowedoperation",
                    Rights.PossessProperty))
                {
                    // Write the Claim resource to the console.
                    Console.WriteLine("resource: {0}", c.Resource.ToString());

                    // If the Claim resource matches the action URI then return true to allow access.
                    if (action == c.Resource.ToString())
                        return true;
                }
            }
        }

        // If this point is reached, return false to deny access.
         return false;
    }
}
Public Class MyServiceAuthorizationManager
    Inherits ServiceAuthorizationManager
    
    Protected Overrides Function CheckAccessCore(ByVal operationContext As OperationContext) As Boolean 
        ' Extract the action URI from the OperationContext. Match this against the claims
        ' in the AuthorizationContext.
        Dim action As String = operationContext.RequestContext.RequestMessage.Headers.Action
        Console.WriteLine("action: {0}", action)
        
        ' Iterate through the various claimsets in the authorizationcontext.
        Dim cs As ClaimSet
        For Each cs In  operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets
            ' Examine only those claim sets issued by System.
            If cs.Issuer Is ClaimSet.System Then
                ' Iterate through claims of type "http://example.org/claims/allowedoperation".
                Dim c As Claim
                For Each c In  cs.FindClaims("http://example.org/claims/allowedoperation", _
                        Rights.PossessProperty)
                    ' Write the Claim resource to the console.
                    Console.WriteLine("resource: {0}", c.Resource.ToString())
                    
                    ' If the Claim resource matches the action URI then return true to allow access.
                    If action = c.Resource.ToString() Then
                        Return True
                    End If
                Next c
            End If
        Next cs 
        ' If we get here, return false, denying access.
        Return False
    
    End Function 
End Class

Remarques

Les données font partie du SecurityMessageProperty pour un message.

Utilisez cette classe pour obtenir des informations sur un contexte de sécurité à distance au moment de l’exécution. Un contexte de sécurité est créé lorsqu'un client est authentifié avec succès et autorisé à accéder à une méthode. Lorsqu'un message est authentifié et autorisé avec succès, les informations sur la sécurité du client et pour l'instance de service en cours peuvent être obtenues à partir d'une instance de cette classe.

Vous pouvez récupérer une instance du ServiceSecurityContext de la propriété Current de la classe OperationContext ou l'utiliser depuis une méthode d'opération de service, comme illustré dans l'exemple suivant.

Analyse d'une classe ClaimSet

La classe est couramment utilisée pour récupérer l'ensemble de revendications actuel pour identifier ou autoriser un client lors de l'accès à une méthode. La classe ClaimSet contient une collection d'objets Claim, et chacun peut être analysé pour déterminer si une revendication spécifique est présente. Si la revendication spécifiée est fournie, l'autorisation peut être accordée. Cette fonctionnalité est fournie en substituant la méthode CheckAccessCore de la classe ServiceAuthorizationManager. Pour obtenir un exemple complet, consultez la stratégie d’autorisation.

Notez que dans certaines circonstances, la propriété IsAuthenticated de l'interface IIdentity retourne true même si le client distant est authentifié en tant qu'utilisateur anonyme. (La PrimaryIdentity propriété retourne une implémentation de l’interface IIdentity .) Les circonstances suivantes doivent être vraies pour que cela se produise :

  • Le service utilise l'authentification Windows.

  • Le service autorise les ouvertures de session anonymes.

  • La liaison est un <customBinding>.

  • La liaison personnalisée inclut un élément <security>.

  • L’élément <security> inclut un <secureConversationBootstrap> avec l’attribut requireSecurityContextCancellation défini sur false.

Constructeurs

ServiceSecurityContext(AuthorizationContext)

Initialise une nouvelle instance de la classe ServiceSecurityContext avec les paramètres d'autorisation spécifiés.

ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>)

Initialise une nouvelle instance de la classe ServiceSecurityContext avec les paramètres d’autorisation spécifiés et la collection de stratégies.

ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

Initialise une nouvelle instance de la classe ServiceSecurityContext avec la collection d’objets de stratégies.

Propriétés

Anonymous

Retourne une instance de la classe ServiceSecurityContext qui contient une collection de revendications vide, les identités et les autres données de contexte habituellement utilisées pour représenter une partie anonyme.

AuthorizationContext

Obtient les informations d'autorisation d'une instance de cette classe. Le AuthorizationContext contient une collection de ClaimSet que l'application peut interroger et dont elle peut récupérer les informations sur la partie.

AuthorizationPolicies

Obtient la collection de stratégies associée à une instance de cette classe.

Current

Obtient le ServiceSecurityContext actuel.

IsAnonymous

Obtient une valeur qui indique si le client actuel a fourni les informations d'identification au service.

PrimaryIdentity

Obtient l'identité principale associée au paramètre en cours.

WindowsIdentity

Obtient l'identité Windows du paramètre en cours.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Voir aussi