Compartir a través de


ServiceSecurityContext Clase

Definición

Representa el contexto de seguridad de una parte remota. En el lado del cliente, representa la identidad del servicio y, en el del servicio, la identidad del cliente.

public ref class ServiceSecurityContext
public class ServiceSecurityContext
type ServiceSecurityContext = class
Public Class ServiceSecurityContext
Herencia
ServiceSecurityContext

Ejemplos

El ejemplo siguiente utiliza la clase ServiceSecurityContext para proporcionar información sobre el contexto de seguridad actual. El código crea una instancia de la clase StreamWriter para escribir la información en un archivo.

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

El ejemplo siguiente muestra una implementación del método CheckAccessCore que utiliza ServiceSecurityContext para analizar un conjunto de notificaciones.

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

Comentarios

Los datos forman parte de SecurityMessageProperty para un mensaje.

Use esta clase para obtener información sobre un contexto de seguridad remota en tiempo de ejecución. Se crea un contexto de seguridad cuando se autentica y autoriza un cliente correctamente para tener acceso a un método. Cuando un mensaje se autentica y autoriza correctamente, la información de seguridad del cliente y para la instancia del servicio actual se puede obtener de una instancia de esta clase.

Puede recuperar una instancia de ServiceSecurityContext de la propiedad Current de la clase OperationContext o utilizarla desde un método de operación de servicio, como se muestra en el siguiente ejemplo.

Análisis de un ClaimSet

Un uso común de la clase consiste en recuperar el conjunto actual de notificaciones con el propósito de identificar o autorizar a un cliente cuando acceda a un método. La clase ClaimSet contiene una colección de objetos Claim y cada uno se puede analizar para determinar si está presente una notificación concreta. Si se proporciona la notificación especificada, se puede otorgar la autorización. Esta funcionalidad se ofrece mediante la sustitución del método CheckAccessCore de la clase ServiceAuthorizationManager. Para obtener un ejemplo completo, consulte la directiva de autorización.

Observe que en algunas circunstancias, la propiedad IsAuthenticated de la interfaz IIdentity devuelve true aun cuando el cliente remoto se autentique como un usuario anónimo. (La PrimaryIdentity propiedad devuelve una implementación de la IIdentity interfaz). Las circunstancias siguientes deben cumplirse para que esto ocurra:

  • El servicio utiliza la autenticación de Windows.

  • El servicio permite inicios de sesión anónimos.

  • El enlace es un <customBinding>.

  • El enlace personalizado incluye un elemento <security>.

  • El <security> elemento incluye secureConversationBootstrap<> con el requireSecurityContextCancellation atributo establecido en false.

Constructores

ServiceSecurityContext(AuthorizationContext)

Inicializa una nueva instancia de la clase ServiceSecurityContext con los parámetros de autorización especificados.

ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>)

Inicializa una nueva instancia de la clase ServiceSecurityContext con los parámetros de autorización y la colección de directivas especificados.

ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

Inicializa una nueva instancia de la clase ServiceSecurityContext con la colección de objetos de directivas.

Propiedades

Anonymous

Devuelve una instancia de la clase ServiceSecurityContext que contiene una colección vacía de notificaciones, identidades y otros datos de contexto que normalmente se utiliza para representar una parte anónima.

AuthorizationContext

Obtiene la información de autorización para una instancia de esta clase. AuthorizationContext contiene una colección de ClaimSet que la aplicación puede interrogar y recuperar la información de la parte.

AuthorizationPolicies

Obtiene la colección de directivas asociada a una instancia de esta clase.

Current

Obtiene la estructura ServiceSecurityContext actual.

IsAnonymous

Obtiene un valor que indica si el cliente actual ha proporcionado las credenciales al servicio.

PrimaryIdentity

Obtiene la identidad primaria asociada con el valor actual.

WindowsIdentity

Obtiene la identidad de Windows del valor actual.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también