Compartir a través de


Cómo restringir el acceso con la clase PrincipalPermissionAttribute

Controlar el acceso a los recursos en un equipo del dominio de Windows es una tarea de seguridad básica. Por ejemplo, sólo ciertos usuarios deberían poder ver los datos confidenciales, como la información de la nómina. Este tema explica cómo restringir el acceso a un método exigiendo que el usuario pertenezca a un grupo predefinido. Para ver un ejemplo práctico, consulte Authorizing Access to Service Operations.

La tarea está compuesta de dos procedimientos independientes. El primero crea el grupo y lo rellena con usuarios. El segundo aplica la clase PrincipalPermissionAttribute para especificar el grupo.

Para crear un grupo de Windows

  1. Abra la consola Administración del equipo.

  2. En el panel izquierdo, haga clic en Usuarios y grupos locales.

  3. Haga clic con el botón secundario en Gruposy haga clic en Nuevo grupo.

  4. En la casilla Nombre de grupo, escriba un nombre para el nuevo grupo.

  5. En la casilla Descripción, escriba una descripción del nuevo grupo.

  6. Para agregar nuevos miembros al grupo, haga clic en Agregar.

  7. Si se ha agregado al grupo y desea probar el código siguiente, debe cerrar la sesión en el equipo y volver a iniciarla para estar incluido en el grupo.

Para exigir la pertenencia del usuario

  1. Abra el archivo de código de Windows Communication Foundation (WCF) que contiene el código del contrato de servicio implementado. Para obtener más información acerca de implementación de un contrato, vea Implementación de contratos de servicio.

  2. Aplique el atributo PrincipalPermissionAttribute a cada método que debe estar restringido a un grupo concreto. Establezca la propiedad Action en Demand y la propiedad Role en el nombre del grupo. Por ejemplo:

    Nota

    Si se aplica el atributo a un contrato PrincipalPermissionAttribute, se iniciará una SecurityException. El atributo sólo puede aplicarse en el nivel del método.

Uso de un certificado para controlar el acceso a un método

También puede utilizar la clase PrincipalPermissionAttribute para controlar el acceso a un método si el tipo de credencial de cliente es un certificado. Para hacerlo, debe tener el asunto y la huella digital del certificado.

Para examinar las propiedades de un certificado, vea Cómo: Ver certificados con el complemento de MMC. Para encontrar el valor de huella digital, vea Cómo recuperar la huella digital de un certificado.

Para controlar el acceso mediante un certificado

  1. Aplique la clase PrincipalPermissionAttribute al método al que desea restringir el acceso.

  2. Establezca la acción del atributo en System.Security.Permissions.SecurityAction.Demand.

  3. Establezca la propiedad Name en una cadena que esté compuesta del nombre del sujeto y la huella digital del certificado. Separe los dos valores con un punto y coma y un espacio, como se muestra en el ejemplo siguiente:

  4. Establezca la propiedad PrincipalPermissionMode en UseAspNetRoles como se muestra en el siguiente ejemplo de configuración:

    <behaviors>
      <serviceBehaviors>
      <behavior name="SvcBehavior1">
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" />
      </behavior>
      </serviceBehaviors>
    </behaviors>
    

    Establecer este valor en UseAspNetRoles indica que la propiedad Name del PrincipalPermissionAttribute se utilizará para realizar una comparación de cadenas. Cuando se utiliza un certificado como una credencial del cliente, WCF concatena de forma predeterminada el nombre común del certificado y la huella digital con un punto y coma para crear un valor único para la identidad primaria del cliente. Con UseAspNetRoles establecido como PrincipalPermissionMode en el servicio, este valor de identidad primaria se compara con el valor de la propiedad Name para determinar los derechos de acceso del usuario.

    Alternativamente, al crear un servicio autohospedado, establezca la propiedad PrincipalPermissionMode en código como se muestra en el código siguiente:

Consulte también

Referencia

PrincipalPermissionAttribute
PrincipalPermissionAttribute
Demand
Role

Conceptos

Información general sobre seguridad
Implementación de contratos de servicio

Otros recursos

Authorizing Access to Service Operations