Resumen Examen MCTS 70-536 – Autenticación y Autorización

 http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&locale=en-us

Este es otro de los resúmenes que he rescatado. Va de la gestión de la seguridad en el .net Framework.

Como curiosidad, indicar que en la RAE sólo existe el término Autenticación, y no Autentificación. Se define autenticación como la acción y el efecto de autenticar, y autenticar es "autorizar o legalizar algo", o bien "dar fe de la verdad de un hecho o documento con autoridad legal" (fuente: diccionario online de la RAE). Creo que conocer el significado de las palabras es importante para aclarar nuestras ideas y trasmitirlas con fidelidad a nuestros pensamientos. Por eso me detengo en estos detalles.

Obs de último momento: Están admitidos tanto el verbo autenticar como autentificar. Ambos términos tienen el mismo significado. Ver + info aquí.

Bueno… a lo que íbamos.

En la jerga informática, que es la que nos interesa…

Autenticación: Es el proceso de identificación de un usuario.

Autorización: Es proceso por el que permite o deniega el acceso de un usuario a un recurso.

La clase System.Security.Principal.WindowsIdentity representa un usuario de Windows. No permite autenticar a un usuario; solo guarda el resultado de la autenticación. Estos son sus métodos más importantes:

GetAnonymous (shared)

Devuelve un objeto WindowsIdentity que representa a un usuario anónimo.

GetCurrent (shared)

Devuelve un objeto WindowsIdentity que representa el usuario actual de Windows.

Impersonate (shared)

Devuelve un objeto WindowsImpersonationContext que representa un usuario concreto del sistema. Permite al código que se está ejecutando reemplazar a otro usuario de Windows.

GetCurrent

Devuelve el objeto WindowsPrincipal correspondiente al usuario.

Estas son propiedades (no estáticas) de WindowsIdentity

AuthenticationType

String que indica el método de autenticación. Generalmente "NTLM".

IsAnonymous

bool que indica si el usuario es anónimo.

IsAuthenticated

bool que indica si el usuario ha sido autenticado.

IsGuest

bool que indica si el usuario es un usuario "guest" o invitado.

IsSystem

bool que indica si el usuario es un usuario de sistema.

Name

string con el nombre de usuario y el dominio en el que ha sido autenticado. Si posee una barra invertida () dentro del nombre, indica que el usuario ha si do autenticado por un dominio de Active Directory. En caso contrario la autenticación se produjo contra el equipo local.

Token

int con el token identificador del usuario.

La clase WindowsPrincipal proporciona acceso a los grupos de los que un usuario es miembro. Esta clase debe ser creada pasando como parámetro de su constructor una instancia de WindowsIdentity, o bien llamando  al método GetCurrent() de WindowsIdentity. Estos son algunos de sus métodos:

IsInRole

bool que indica si el usuario es miembro del grupo especificado.

Las clases PrincipalPermission y PrincipalPermissionAttribute permiten, en conjunto, saber si el usuario cumple o no unos criterios de autorización determinados.

Estas son las propiedades de PrincipalPermission

Authenticated

bool que en caso de ser true, indica que el usuario debe estar autenticado para poseer la autorización.

Name

string que indica el nombre que debe tener el usuario para poseer la autorización.

Role

string que indica el nombre del grupo al que debe pertenecer el usuario para poseer la autorización.


Métodos
de PrincipalPermission

Demand

Comprueba que el usuario cumpla con los criterios de Authenticated, Name y Role especificados en sus propiedades. En caso contrario, se lanza una SecurityException.

   


Seguridad Declarativa (Declarative RBS Demands)
: Indica al runtime, mediante atributos, que realize comprobaciones Role-Based Security (Seguridad basada en Roles) antes de ejecutar el código de un ensamblado, clase o método.

Usar este tipo de atributos es la manera más segura de impedir la ejecución de código a usuarios no autorizados, aunque posee algunos inconvenientes.

Para usar estos atributos, es no olvidar realizar los siguientes pasos:

– Realizar una llamada a System.AppDomain.CurrentDomain.SetPrincipalPolicy indicando la política de seguridad para el IPrincipal (usuario) que ejecutará nuestro código.
– Un bloque try catch para capturar accesos no autorizados. Si se denegara el acceso se lanzaría una SecurityException.
– Los atributos PrincipalPermission para declarar los accesos requeridos al ensamblado, clase o método cuyo acceso se desee restringir.

Seguridad Imperativa
Las validaciones usadas en la seguridad imperativa se realizan dentro del código y eliminan la limitación de la seguridad declarativa de restringir los accesos a grandes porciones de código.

Los pasos para incluir la seguridad imperativa en el código son los siguientes:
– Realizar una llamada a System.AppDomain.CurrentDomain.SetPrincipalPolicy indicando la política de seguridad para el IPrincipal (usuario) que ejecutará nuestro código.
– Un bloque try catch para capturar accesos no autorizados. Si se denegara el acceso se lanzaría una SecurityException.
– Un objeto PrincipalPermission para especificar las restricciones que aplicarán al código.
– Una llamada a PrincipalPermission.Demand() para verificar que el IPrincipal especificado está autorizado.

La clase PrincipalPermission posee 3 constructores:

– PrincipalPermission(PermissionState): el enum PermissionState indica si la política de autorización es restrictiva o permisiva, es decir, si de primeras  no autorizamos al recurso a menos que cumpla el resto de requisitos, o si de primeras autorizamos al recurso, a menos que cumpla los requisitos.
– PrincipalPermission(Name, Role): Especifica como requisitos de autorización un nombre de usuario y un rol determinado.
– PrincipalPermission(Name, Role, Authenticated) Especifica como requisitos de autorización un nombre de usuario, un rol y un estado de autorización determinados.

Implementando usuarios y roles(grupos) propios
Para realizar esta tarea es necesario implementar las interfaces System.Security.Principal.IIdentity y System.Security.Principal.IPrincipal. Estas interfaces permiten utilizar la infraestructura de acceso y autenticación de la plataforma. De hecho, las clases WindowsIdentity y WindowsPrincipal las implementan. De igual modo, en asp.net existen la clase FormsIdentity y PassportIdentity que también son implementaciones de estas intefaces.
Con lo cual, para implementar nuestro propio motor de autenticación y gestión de grupos y usuario, tirando por ejemplo, contra una base de datos, debemos, bien heredar de alguna de las clases vistas anteriormente o implementar estas interfaces.

Propiedades de IIdentity

AuthenticationType

string para determinar el tipo de autenticación a usar. Para usar el de windows, NTLM.

IsAuthenticated

booleano que indica si el proceso de autenticación ha sido válido.

Name

string con el nombre de usuario.

Métodos de IPrincipal

Identity

Objeto IIdentity que determina la identidad del usuario

IsInRole

bool que indica si el Identity pertenece al grupo o rol especificados.

La excepción System.Security.Authentication.AuthenticationException se lanza cuando se produce un error de autenticación.

La excepción System.Security.Authentication.InvalidCredentialException se lanza cuando el sistema ha denegado nuestra autenticación y no podemos volver a intentar autenticarnos.

Crossposted from crisfervil.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *