Security is a basic element, working on a new platform inevitably involves knowing the new security features that we have in mind. In this session we will talk about all the possibilities we have, security based on traditional identity, claims and federation.
6. 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!
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 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)
11. 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)
13. 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
14. 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();
});
15. 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)]
16. Políticas como código
#NETCore2017 16
Definimos requerimientos
• IAuthorizationRequirement
Que son validados por uno o más handlers
• AuthorizationHandler<IAuthorizationRequirement>
17. 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();
}
}
18. 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
}
}
21. 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