24.01.2017
.NET Core
24.01.2017
Seguridad en
MVC Core
SOFTWARE DEVELOPMENT ENGINEER
Hugo Biarge
#NETCore2017 3
@hbiarge
hbiarge@plainconcepts.com
Agenda
1.Escenarios de autenticación.
Middlewares.
2.Políticas de autorización
4
Modelo de Middlewares
#NETCore2017 5
Middlewares de autenticación
#NETCore2017 6
Coordinación
AuthenticationManager
• Coordina los diferentes middlewares de autenticación configurados
• Accesible a través de nuevo HttpContext
Atentos a AutomaticChallenge
• Debe haber uno configurado, pero sólo uno!
Demo
características
7
Middlewares habituales
#NETCore2017 8
Cookies
• El más habitual para aplicaciones web tradicionales
Proveedores sociales
• Twitter, Facebook, Microsoft Id, …
OpenId.Connect
• Autenticación + autorización delegada
JWT
• Apis Http
Cookies con usuarios locales
#NETCore2017 9
Proveedores sociales opcionales
Asp.Net Identity
• Integrado en las plantillas
• Separa funcionalidad de persistencia (fácilmente adaptable a esquemas legacy)
Funcionalidades avanzadas
• Confirmación de cuenta
• Autenticación de doble factor
• External providers (por ejemplo, proveedores sociales)
Demo Asp.Net
Identity
10
Cookies con usuarios externos
#NETCore2017 11
Azure Active Directory
• Combinación de varios middlewares
• OpenId.Connect recomendado si el proveedor lo soporta
• Cookies para persistir claims externos en cookie local
Todavía no tenemos soporte para WSFederation
• Prevista para Asp.Net Core 2.0 (2T 2017)
Demo
OpenId.Connect
12
Tokens para Apis Http
#NETCore2017 13
Con usuarios locales o externos
JWT Middleware
• Necesitamos un proveedor de identidad (STS, IdP, OP)
• Azure Active Directory para usuarios externos
• Identity Server 4 para usuarios locales
Diferentes flujos según el tipo de aplicación
Convivencia cookies y tokens
#NETCore2017 14
En el mismo proyecto web
ActiveAuthenticationSchemes
• AutomaticAuthenticate debe ser false en todos los middlewares
// In Authorize attribute
[Authorize(ActiveAuthenticationSchemes = "Bearer")]
// In Startup ConfigureServices
options.AddPolicy("WebApi", policy =>
{
policy.AuthenticationSchemes.Add("Bearer");
policy.RequireAuthenticatedUser();
});
Autorización basada en políticas
#NETCore2017 15
Mecanismo de autorización por defecto
Permite clara separación de la lógica de autorización del negocio
// In Startup ConfigureServices
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdministration", policy =>
{
policy.RequireRole("Administration");
policy.RequireClaim("Management");
policy.RequireClaim("OneOfMany", "a", "b");
});
});
// Discouraged
[Authorize(Roles = "Administrator")]
// Better
[Authorize(Policy = "Administrator")]
// Best
[Authorize(Policies.Sales)]
Políticas como código
#NETCore2017 16
Definimos requerimientos
• IAuthorizationRequirement
Que son validados por uno o más handlers
• AuthorizationHandler<IAuthorizationRequirement>
Autorización imperativa
#NETCore2017 17
En controladores y/o vistas
IAuthorizationService
• Puede ser inyectado en cualquier controlador (o servicio) o incluso 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
#NETCore2017 18
AuthorizationHandler<Requirement, Resource>
• Añadir el estado de un determinado modelo a la lógica de autorización
public class ProductAuthorizationHandler
: AuthorizationHandler<OperationAuthorizationRequirement, Product>
{
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context,
OperationAuthorizationRequirement requirement,
Product resource)
{
// Logic to validate requirement
}
}
Demo
autorización
19
@plainconcepts
¡GRACIAS!
@hbiarge
www.plainconcepts.com
MADRID
Paseo de la Castellana 163, 10º
28046 Madrid. España
T. (+34) 91 5346 836
BILBAO
Nervión 3 , 6º
48001 Bilbao. España
T. (+34) 94 6008 168
BARCELONA
Av. Josep Tarradellas 10, 6º 1ª
08029 Barcelona. España
T. (+34) 93 3607 114
SEVILLA
Avenida de la innovación s/n
Edificio Renta Sevilla, 3º A
41020 Sevilla. España
DUBAI
Dubai Internet City. Building 1
73030 Dubai. EAU
T. (+971) 4 551 6653
LONDON
Impact Hub Kings Cross
24B York Way, N1 9AB
London. UK
SEATTLE
1511, Third Ave
Seattle WA 98101. USA
T. (+1) 206 708 1285

Security in MVC Core by Hugo Biarge

  • 1.
  • 2.
  • 3.
    SOFTWARE DEVELOPMENT ENGINEER HugoBiarge #NETCore2017 3 @hbiarge hbiarge@plainconcepts.com
  • 4.
  • 5.
  • 6.
    Middlewares de autenticación #NETCore20176 Coordinación AuthenticationManager • Coordina los diferentes middlewares de autenticación configurados • Accesible a través de nuevo HttpContext Atentos a AutomaticChallenge • Debe haber uno configurado, pero sólo uno!
  • 7.
  • 8.
    Middlewares habituales #NETCore2017 8 Cookies •El más habitual para aplicaciones web tradicionales Proveedores sociales • Twitter, Facebook, Microsoft Id, … OpenId.Connect • Autenticación + autorización delegada JWT • Apis Http
  • 9.
    Cookies con usuarioslocales #NETCore2017 9 Proveedores sociales opcionales Asp.Net Identity • Integrado en las plantillas • Separa funcionalidad de persistencia (fácilmente adaptable a esquemas legacy) Funcionalidades avanzadas • Confirmación de cuenta • Autenticación de doble factor • External providers (por ejemplo, proveedores sociales)
  • 10.
  • 11.
    Cookies con usuariosexternos #NETCore2017 11 Azure Active Directory • Combinación de varios middlewares • OpenId.Connect recomendado si el proveedor lo soporta • Cookies para persistir claims externos en cookie local Todavía no tenemos soporte para WSFederation • Prevista para Asp.Net Core 2.0 (2T 2017)
  • 12.
  • 13.
    Tokens para ApisHttp #NETCore2017 13 Con usuarios locales o externos JWT Middleware • Necesitamos un proveedor de identidad (STS, IdP, OP) • Azure Active Directory para usuarios externos • Identity Server 4 para usuarios locales Diferentes flujos según el tipo de aplicación
  • 14.
    Convivencia cookies ytokens #NETCore2017 14 En el mismo proyecto web ActiveAuthenticationSchemes • AutomaticAuthenticate debe ser false en todos los middlewares // In Authorize attribute [Authorize(ActiveAuthenticationSchemes = "Bearer")] // In Startup ConfigureServices options.AddPolicy("WebApi", policy => { policy.AuthenticationSchemes.Add("Bearer"); policy.RequireAuthenticatedUser(); });
  • 15.
    Autorización basada enpolíticas #NETCore2017 15 Mecanismo de autorización por defecto Permite clara separación de la lógica de autorización del negocio // In Startup ConfigureServices services.AddAuthorization(options => { options.AddPolicy("RequireAdministration", policy => { policy.RequireRole("Administration"); policy.RequireClaim("Management"); policy.RequireClaim("OneOfMany", "a", "b"); }); }); // Discouraged [Authorize(Roles = "Administrator")] // Better [Authorize(Policy = "Administrator")] // Best [Authorize(Policies.Sales)]
  • 16.
    Políticas como código #NETCore201716 Definimos requerimientos • IAuthorizationRequirement Que son validados por uno o más handlers • AuthorizationHandler<IAuthorizationRequirement>
  • 17.
    Autorización imperativa #NETCore2017 17 Encontroladores y/o vistas IAuthorizationService • Puede ser inyectado en cualquier controlador (o servicio) o incluso vistas public async Task<IActionResult> Index() { if (await _authorizationService.AuthorizeAsync(User, Policies.Over21)) { // User is authorized here. } else { return new ChallengeResult(); } }
  • 18.
    Autorización basada enrecursos #NETCore2017 18 AuthorizationHandler<Requirement, Resource> • Añadir el estado de un determinado modelo a la lógica de autorización public class ProductAuthorizationHandler : AuthorizationHandler<OperationAuthorizationRequirement, Product> { protected override Task HandleRequirementAsync( AuthorizationHandlerContext context, OperationAuthorizationRequirement requirement, Product resource) { // Logic to validate requirement } }
  • 19.
  • 20.
  • 21.
    www.plainconcepts.com MADRID Paseo de laCastellana 163, 10º 28046 Madrid. España T. (+34) 91 5346 836 BILBAO Nervión 3 , 6º 48001 Bilbao. España T. (+34) 94 6008 168 BARCELONA Av. Josep Tarradellas 10, 6º 1ª 08029 Barcelona. España T. (+34) 93 3607 114 SEVILLA Avenida de la innovación s/n Edificio Renta Sevilla, 3º A 41020 Sevilla. España DUBAI Dubai Internet City. Building 1 73030 Dubai. EAU T. (+971) 4 551 6653 LONDON Impact Hub Kings Cross 24B York Way, N1 9AB London. UK SEATTLE 1511, Third Ave Seattle WA 98101. USA T. (+1) 206 708 1285