SlideShare una empresa de Scribd logo
Authorization in.Net Core
Hugo Biarge
Software Engineer at adidas
hugo.biarge@adidas.com
@hbiarge
Agenda
• De dónde venimos
• Authorization Policies
• Requerimientos sencillos basados en información del usuario
• Requerimientos basados en código
• Autorización en función del estado del recurso
• Uso de diferentes esquemas
https://github.com/hbiarge/Authorization-Workshop
Authentication vs Authorization
Autenticación
Identificar elementos de autenticación en la petición, interpretarlos y
crear instancia de ClaimsPrincipal con los claims del usuario
Autorización
En base a los claims del usuario (y del estado del recurso al que
accede), que información puede obtener y/o qué acciones puede
realizar
De dónde venimos
• [Authorize] y [AllowAnonymous] en WebApi y MVC de full
Framework
• Único mecanismo existente “out of the box”
• Soporte de roles y usuarios
• Implementado como un filtro de Autenticación
• Determina el momento del procesamiento de la petición en el que el código se ejecuta
ClaimsPrincipal and ClaimsIdentity
• ClaimsPrincipal agrega los Claims de una o varias identidades con las
que se puede haber autenticado la petición
• Cada ClaimsIdentity contiene el conjunto de Claims de un esquema
de autenticación
• Un Claim es una estructura que define:
• Name: Clave (puede haber duplicados)
• Value: Valor
• Issuer: Quién lo ha emitido
Setup de los ejemplos
• TestHost
• Acheve.TestHost.Security
Pero… en .Net Core es igual, no?
• [Authorize] y [AllowAnonymous] también existen en .Net Core
• Hace que el uso básico de los atributos tenga el mismo resultado que en
versions anteriores
• La infraestructura subyacente es completamente nueva
• Soporta solo Roles (por motivos de compatibilidad) y Policies
Políticas de autorización
• Compuestas por uno o más Requirements
• Un Requirement es gestionado por uno o más Handlers
• Una Política será satisfecha (autorizada) si TODOS los Requirements
son autorizados
• Un Requirement está autorizado si por lo menos uno de sus Handlers lo
autoriza
• Por defecto, se evalúan todos los Handlers registrados para un
Requirement aunque alguno falle
Infraestructura de autorización
• Requirements y Handlers
• IAuthorizationRequirement
• AuthorizationHandler<IAuthorizationRequirement>
• AuthorizationHandler<IAuthorizationRequirement, Resource>
• El Requirement define el contexto de autorización
• Proporciona el estado
• El Handler define la lógica de autorización teniendo en cuenta:
• Contexto de autorización
• Requirement
• (opcionalmente) El recurso a autorizar
Lógica de autorización (Handlers)
• Si la autorización es correcta -> context.Succeed(requirement)
• Si la autorización NO es correcta -> no hacer nada!
• Puede haber otros Handlers para el mismo Requirement
• Sólo en casos extremos -> context.Fail()
Políticas sencillas
// In Startup ConfigureServices
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdministration", policy =>
{
policy.RequireRole("Administration");
policy.RequireClaim("Management");
policy.RequireClaim("OneOfMany", "a", "b");
});
});
Políticas como código
public class MinimumAgeRequirement
: AuthorizationHandler<MinimumAgeRequirement>, IAuthorizationRequirement
{
protected override void Handle(
AuthorizationContext context, MinimumAgeRequirement requirement)
{
// Logic to validate requirement
context.Succeed(requirement);
}
}
// In Startup ConfigureServices
options.AddPolicy("Over18Only", policy =>
{
policy.Requirements.Add(new MinimumAgeRequirement(18));
});
Autorización imperativa
IAuthorizationService en Controladores o Vistas
public async Task<IActionResult> Index()
{
if (await _authorizationService.AuthorizeAsync(User, Policies.Over21))
{
// User is authorized here.
}
else
{
return new ChallengeResult();
}
}
Autorización basada en recursos
• AuthorizationHandler<Requirement, Resource>
• En el método Handle tenemos acceso al recurso de forma tipada
public class ProductAuthorizationHandler
: AuthorizationHandler<OperationAuthorizationRequirement, Product>
{
protected override void Handle(
AuthorizationContext context,
OperationAuthorizationRequirement requirement,
Product resource)
{ // Logic to validate requirement }
}
Diferentes esquemas de autorización
• Podemos definirlos tanto en las políticas como en el atributo
[Authorize]
• Mezcla en el ClaimsPrincipal una ClaimsIdentity por cada esquema
requerido
• El ClaimsPrincipal expone todos los claims agregados de todos los
ClaimsIdentity definidos
• Redefine el esquema de autenticación predefinido
Gracias!
¿Preguntas?

Más contenido relacionado

PPTX
Security in MVC Core by Hugo Biarge
PPTX
Autenticación, autorización y control de acceso
PDF
REST - deSymfony2012
PDF
AWS Summits América Latina 2015-Mejores Prácticas de Seguridad para IAM (Iden...
PPTX
Strust
PPT
Apache2 dia1
PPTX
GAM GeneXus Access Manager
PDF
Autenticación en aplicaciones .Net web y nativas
Security in MVC Core by Hugo Biarge
Autenticación, autorización y control de acceso
REST - deSymfony2012
AWS Summits América Latina 2015-Mejores Prácticas de Seguridad para IAM (Iden...
Strust
Apache2 dia1
GAM GeneXus Access Manager
Autenticación en aplicaciones .Net web y nativas

Último (11)

PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PPTX
Fundamentos de Python - Curso de Python dia 1
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
PPTX
Implementación equipo monitor12.08.25.pptx
PPTX
sistemas de informacion.................
Derechos_de_Autor_y_Creative_Commons.pptx
Conceptos basicos de Base de Datos y sus propiedades
Fundamentos de Python - Curso de Python dia 1
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
Su punto de partida en la IA: Microsoft 365 Copilot Chat
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
AutoCAD Herramientas para el futuro, Juan Fandiño
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
Implementación equipo monitor12.08.25.pptx
sistemas de informacion.................
Publicidad
Publicidad

Authorization in.Net Core

  • 2. Hugo Biarge Software Engineer at adidas hugo.biarge@adidas.com @hbiarge
  • 3. Agenda • De dónde venimos • Authorization Policies • Requerimientos sencillos basados en información del usuario • Requerimientos basados en código • Autorización en función del estado del recurso • Uso de diferentes esquemas https://github.com/hbiarge/Authorization-Workshop
  • 4. Authentication vs Authorization Autenticación Identificar elementos de autenticación en la petición, interpretarlos y crear instancia de ClaimsPrincipal con los claims del usuario Autorización En base a los claims del usuario (y del estado del recurso al que accede), que información puede obtener y/o qué acciones puede realizar
  • 5. De dónde venimos • [Authorize] y [AllowAnonymous] en WebApi y MVC de full Framework • Único mecanismo existente “out of the box” • Soporte de roles y usuarios • Implementado como un filtro de Autenticación • Determina el momento del procesamiento de la petición en el que el código se ejecuta
  • 6. ClaimsPrincipal and ClaimsIdentity • ClaimsPrincipal agrega los Claims de una o varias identidades con las que se puede haber autenticado la petición • Cada ClaimsIdentity contiene el conjunto de Claims de un esquema de autenticación • Un Claim es una estructura que define: • Name: Clave (puede haber duplicados) • Value: Valor • Issuer: Quién lo ha emitido
  • 7. Setup de los ejemplos • TestHost • Acheve.TestHost.Security
  • 8. Pero… en .Net Core es igual, no? • [Authorize] y [AllowAnonymous] también existen en .Net Core • Hace que el uso básico de los atributos tenga el mismo resultado que en versions anteriores • La infraestructura subyacente es completamente nueva • Soporta solo Roles (por motivos de compatibilidad) y Policies
  • 9. Políticas de autorización • Compuestas por uno o más Requirements • Un Requirement es gestionado por uno o más Handlers • Una Política será satisfecha (autorizada) si TODOS los Requirements son autorizados • Un Requirement está autorizado si por lo menos uno de sus Handlers lo autoriza • Por defecto, se evalúan todos los Handlers registrados para un Requirement aunque alguno falle
  • 10. Infraestructura de autorización • Requirements y Handlers • IAuthorizationRequirement • AuthorizationHandler<IAuthorizationRequirement> • AuthorizationHandler<IAuthorizationRequirement, Resource> • El Requirement define el contexto de autorización • Proporciona el estado • El Handler define la lógica de autorización teniendo en cuenta: • Contexto de autorización • Requirement • (opcionalmente) El recurso a autorizar
  • 11. Lógica de autorización (Handlers) • Si la autorización es correcta -> context.Succeed(requirement) • Si la autorización NO es correcta -> no hacer nada! • Puede haber otros Handlers para el mismo Requirement • Sólo en casos extremos -> context.Fail()
  • 12. Políticas sencillas // In Startup ConfigureServices services.AddAuthorization(options => { options.AddPolicy("RequireAdministration", policy => { policy.RequireRole("Administration"); policy.RequireClaim("Management"); policy.RequireClaim("OneOfMany", "a", "b"); }); });
  • 13. Políticas como código public class MinimumAgeRequirement : AuthorizationHandler<MinimumAgeRequirement>, IAuthorizationRequirement { protected override void Handle( AuthorizationContext context, MinimumAgeRequirement requirement) { // Logic to validate requirement context.Succeed(requirement); } } // In Startup ConfigureServices options.AddPolicy("Over18Only", policy => { policy.Requirements.Add(new MinimumAgeRequirement(18)); });
  • 14. Autorización imperativa IAuthorizationService en Controladores o Vistas public async Task<IActionResult> Index() { if (await _authorizationService.AuthorizeAsync(User, Policies.Over21)) { // User is authorized here. } else { return new ChallengeResult(); } }
  • 15. Autorización basada en recursos • AuthorizationHandler<Requirement, Resource> • En el método Handle tenemos acceso al recurso de forma tipada public class ProductAuthorizationHandler : AuthorizationHandler<OperationAuthorizationRequirement, Product> { protected override void Handle( AuthorizationContext context, OperationAuthorizationRequirement requirement, Product resource) { // Logic to validate requirement } }
  • 16. Diferentes esquemas de autorización • Podemos definirlos tanto en las políticas como en el atributo [Authorize] • Mezcla en el ClaimsPrincipal una ClaimsIdentity por cada esquema requerido • El ClaimsPrincipal expone todos los claims agregados de todos los ClaimsIdentity definidos • Redefine el esquema de autenticación predefinido