Security in MVC Core by Hugo Biarge

Preview:

Citation preview

24.01.2017.NET Core

24.01.2017

Seguridad en MVC Core

#NETCore2017 3

SOFTWARE DEVELOPMENT ENGINEER

Hugo Biarge@hbiargehbiarge@plainconcepts.com

4

Agenda1.Escenarios de

autenticación. Middlewares.

2.Políticas de autorización

#NETCore2017 5

Modelo de Middlewares

Fuente: Dominick Baier (@leastprivilege)

#NETCore2017 6

Middlewares de autenticaciónCoordinació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

Demo características

#NETCore2017 8

Middlewares habitualesCookies• El más habitual para aplicaciones web tradicionalesProveedores sociales• Twitter, Facebook, Microsoft Id, …OpenId.Connect• Autenticación + autorización delegadaJWT• Apis Http

#NETCore2017 9

Cookies con usuarios localesProveedores 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

Demo Asp.Net Identity

#NETCore2017 11

Cookies con usuarios externos

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

Demo OpenId.Connect

#NETCore2017 13

Tokens para Apis HttpCon 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

#NETCore2017 14

Convivencia cookies y tokensEn el mismo proyecto web

ActiveAuthenticationSchemes• AutomaticAuthenticate debe ser false en todos los

middlewares// In Authorize attribute[Authorize(ActiveAuthenticationSchemes = "Bearer")]

// In Startup ConfigureServicesoptions.AddPolicy("WebApi", policy =>{ policy.AuthenticationSchemes.Add("Bearer"); policy.RequireAuthenticatedUser();});

#NETCore2017 15

Autorización basada en políticasMecanismo de autorización por defecto

Permite clara separación de la lógica de autorización del negocio

// In Startup ConfigureServicesservices.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)]

#NETCore2017 16

Políticas como códigoDefinimos requerimientos • IAuthorizationRequirementQue son validados por uno o más handlers• AuthorizationHandler<IAuthorizationRequirement>

#NETCore2017 17

Autorización imperativaEn controladores y/o vistas

IAuthorizationService• Puede ser inyectado en cualquier controlador (o servicio) o

incluso vistaspublic async Task<IActionResult> Index(){ if (await _authorizationService.AuthorizeAsync(User, Policies.Over21)) { // User is authorized here. } else { return new ChallengeResult(); }}

#NETCore2017 18

Autorización basada en recursos

AuthorizationHandler<Requirement, Resource>• Añadir el estado de un determinado modelo a la lógica de

autorizaciónpublic class ProductAuthorizationHandler : AuthorizationHandler<OperationAuthorizationRequirement, Product>{ protected override Task HandleRequirementAsync( AuthorizationHandlerContext context, OperationAuthorizationRequirement requirement, Product resource) { // Logic to validate requirement }}

19

Demo autorización

@plainconcepts

¡GRACIAS!@hbiarge

www.plainconcepts.com

MADRIDPaseo de la Castellana 163, 10º

28046 Madrid. EspañaT. (+34) 91 5346 836

BILBAONervión 3 , 6º

48001 Bilbao. EspañaT. (+34) 94 6008 168

BARCELONAAv. Josep Tarradellas 10, 6º 1ª

08029 Barcelona. EspañaT. (+34) 93 3607 114

SEVILLAAvenida de la innovación s/nEdificio Renta Sevilla, 3º A

41020 Sevilla. España

DUBAIDubai Internet City. Building 1

73030 Dubai. EAUT. (+971) 4 551 6653

LONDONImpact Hub Kings Cross24B York Way, N1 9AB

London. UK

SEATTLE1511, Third Ave

Seattle WA 98101. USAT. (+1) 206 708 1285

Recommended