Mostrando las entradas con la etiqueta Authorization. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Authorization. Mostrar todas las entradas

Manejando Roles por aplicación mediante ADFS

Este post es parte de una serie de artículos complementarios a la VAN sobre Identity Providers.

Escenario

Comúnmente, en asp.net, utilizamos la siguiente sintaxis para preguntar si una persona tiene asignado un determinado rol:

HttpContext.Current.User.IsInRole("Administrators")

o, en MVC, con el atributo:

[Authorize(Roles = "Administrators")]

Configurando ADFS

Con ADFS hacemos lo mismo. El tema está en configurar correctamente el issuer (ADFS) para que emita los claims correspondientes, para esto debemos configurar una “Claim Rule” que genere tantos claims con el Type “http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name” como roles tenga la persona en la aplicación, en el Value de cada uno de estos claims irá el nombre de cada rol.

Ejemplo de Claim Rule

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"]
=> issue(store = "AttributeStore", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"), query = "SELECT Role FROM Roles WHERE UserName = {0} AND RelyingParty = {1}", param = c.Value, param = "https://aplicacionweb.neluz.int/");

Con la siguiente Claim Rule estamos haciendo un select sobre una tabla llamada Roles donde tenemos un registro por cada Rol (Role) que tiene asignado el usuario (UserName) en la aplicación a la que está queriendo ingresar (RelyintParty), todo esto sobre la base de datos configurada en AttributeStore.

Nota: una ventaja que nos da ADFS en este esquema es que los roles son por Usuario y por Aplicación, por sobre el caso de usar los grupos de AD donde los roles son solo por Usuario.

Seguir leyendo otros artículos de la serie

Controlando el acceso a mi sitio web con autorizaciones mediante ADFS

Este post es parte de una serie de artículos complementarios a la VAN sobre Identity Providers.

Escenario

Para decidir cual usuario ingresa y cual no a una aplicación debemos configurarlo en ADFS, es decir que si el usuario no tiene autorización para ingresar a la aplicación, ADFS nunca va a redireccionar nuevamente al sitio que lo invocó.

Configurando ADFS

Lo que debemos configurar se llama “Issuance Authorization Rule” y lo encontramos entre las “Claims Rule” en la consola de ADFS. debemos crear una que emita un token de cuyo type debe ser: “http://schemas.microsoft.com/authorization/claims/permit” y, en caso de que tenga el acceso permitido, el valor de dicho claim debe ser “true”.

Ejemplo de Authorization Rule

autorizando-adfs-1   autorizando-adfs-2

Si vemos un caso donde se permita la entrada a todos los usuarios (el valor por defecto), veremos que se trata de una rule como la siguiente:

=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");

mientras que si controlamos el acceso, vamos a tener algo mas parecido a:

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"]
=> issue(store = "AttributeStore", types = ("http://schemas.microsoft.com/authorization/claims/permit"), query = "EXEC sp_Is_Allow_Access {0}, {1}", param = c.Value, param = "https://testigomvc.neluz.int/");

en este caso estamos invocando al stored procedure “sp_Is_Allow_Access” mediante la conexión configurada en “AttributeStore” con el nombre del usuario autenticado (c.value) y con el identificador de la aplicación en cuestión: “https://testigomvc.neluz.int/” como parámetros. Si este stored procedure devuelve un registro con el valor “true” entonces se permitirá el acceso, en caso contrario se denegará.

De esta manera y sin cambiar nada en nuestra aplicación controlamos quien puede ingresar y quien no.

Seguir leyendo otros artículos de la serie