Compartir vía


Autorización de acceso a operaciones de servicio

Este ejemplo muestra cómo utilizar <serviceAuthorization> para habilitar el uso del atributo PrincipalPermissionAttribute para autorizar el acceso a las operaciones de servicio. Este ejemplo se basa en el ejemplo de Introducción. El servicio y el cliente se configuran con <wsHttpBinding>. El atributo mode de <security> se ha definido en Message y clientCredentialType se ha establecido en Windows. PrincipalPermissionAttribute se aplica a cada método de servicio y restringe el acceso a cada operación. El llamador debe ser un administrador de Windows para tener acceso a cada operación.

En este ejemplo, el cliente es una aplicación de consola (.exe) y los Servicios de Internet Information Server (IIS) hospedan el servicio.

Nota

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

El archivo de configuración del servicio usa <serviceAuthorization> para establecer el atributo principalPermissionMode:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- The serviceAuthorization behavior sets the
           principalPermissionMode to UseWindowsGroups.
           This puts a WindowsPrincipal on the current thread when a
           service is invoked. -->
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Establecer principalPermissionMode en UseWindowsGroups habilita el uso de PrincipalPermissionAttribute basado en nombres del grupo de Windows.

PrincipalPermissionAttribute se aplica a cada operación para exigir al llamador que forme parte del grupo de administradores de Windows, como se muestra en el siguiente código de ejemplo.

[PrincipalPermission(SecurityAction.Demand,
                             Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
    double result = n1 + n2;
    return result;
}

Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. El cliente se comunica correctamente con cada operación si se está ejecutando bajo una cuenta que forme parte del grupo Administradores; de lo contrario, se deniega el acceso. Para experimentar con un error de autorización, ejecute el cliente con una cuenta que no forme parte del grupo Administradores. Presione ENTRAR en la ventana de la consola para cerrar el cliente.

Se puede notificar un servicio de los errores de autorización implementando IErrorHandler. Consulte Extensión de control a control de errores y creación de informes para obtener información sobre la implementación de IErrorHandler.

Configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  3. Para ejecutar el ejemplo en una configuración con un solo equipo o con varios, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.