Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ServiceSecurityContext

 

Publicado: noviembre de 2016

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.

Espacio de nombres:   System.ServiceModel
Ensamblado:  System.ServiceModel (en System.ServiceModel.dll)

System.Object
  System.ServiceModel.ServiceSecurityContext

public class ServiceSecurityContext

NombreDescripción
System_CAPS_pubmethodServiceSecurityContext(AuthorizationContext)

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

System_CAPS_pubmethodServiceSecurityContext(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.

System_CAPS_pubmethodServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

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

NombreDescripción
System_CAPS_pubpropertySystem_CAPS_staticAnonymous

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.

System_CAPS_pubpropertyAuthorizationContext

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.

System_CAPS_pubpropertyAuthorizationPolicies

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

System_CAPS_pubpropertySystem_CAPS_staticCurrent

Obtiene la estructura ServiceSecurityContext actual.

System_CAPS_pubpropertyIsAnonymous

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

System_CAPS_pubpropertyPrimaryIdentity

Obtiene la identidad primaria asociada con el valor actual.

System_CAPS_pubpropertyWindowsIdentity

Obtiene la identidad de Windows del valor actual.

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

Los datos forman parte de SecurityMessageProperty para un mensaje.

Utilice esta clase para obtener información sobre un contexto de seguridad remoto en el 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.

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 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 propiedad PrimaryIdentity devuelve una implementación de la interfaz IIdentity.) Las siguientes circunstancias deben ser verdaderas para que esto se produzca:

  • El servicio utiliza la autenticación de Windows.

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

  • El enlace es un elemento <customBinding>.

  • El enlace personalizado incluye un elemento <security>.

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

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;
}

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;                 
    }
}

.NET Framework
Disponible desde 3.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: