Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Securing your Web API in ASP.NET Core

Securing your Web API in ASP.NET Core

About the basics security measures that any developer should use when creating REST API's in ASP.NET Core. It focuses on authentication with JWT (Spanish).

Avatar for Gabriela Martinez

Gabriela Martinez

April 26, 2018

Other Decks in Programming

Transcript

  1. Agenda • Aspectos de Seguridad en una Web API •

    Seguridad en la conexión con SSL. • Autenticación y Autorización de usuarios • DEMO
  2. Web API == Aplicación Web? • Las aplicaciones funcionan en

    base a sesiones, API’s deben ser stateless. • API’s tienen distintos tipos de clientes, el cliente en el caso de las aplicaciones es el navegador; móvil o de escritorio. • API’s interactúan con servicios además de interactuar con usuarios.
  3. HTTPS en una API – Seguridad en la conexión •

    SSL/TLS: Conexión privada lo que asegura integridad en los mensajes de la comunicación. • ¿Que hay de malo en usar [RequireHttps]? • Rechazar todas las conexiones no seguras • Respuesta con un código de error HTTP • ¿Y qué pasa con HSTS (Strict Transport Security)?
  4. Aspectos de Seguridad en Web API’s • Autenticación y Autorización

    ¿Quién eres? ¿Qué tienes permiso de hacer?
  5. Opciones de autenticación en ASP.NET Core • First party •

    Cookie based authentication es stateful, por lo cual no se recomienda para una RESTful API. • Basic Authentication: Debe usarse únicamente en conjunto con SSL y en los casos en lo que la seguridad no sea algo demasiado crítico o no se tenga otra opción. Recomendable para accesos en intranets o para aplicaciones de IoT. • Third party o Middleware • JWT Tokens: Son stateless, cada token es “self-contained”, permite almacenar cualquier tipo de metadatos en un formato json válido. • Multi-Factor Authentication
  6. Elementos de Json Web Tokens • Header: Objeto Json que

    contiene: Metadata del tipo de JWT y el algoritmo hash utilizado para encriptar los datos. • Payload: Objeto Json con los datos que se compartirán entre la fuente y el destino, encriptados en base-64. • Signature: Sirve para verificar la integridad de los datos basado en los dos datos anteriores además de una llave secreta que se mantiene del lado del server. [X=base64(header)].[Y=base64(payload)].[signature([X].[Y])]
  7. Recursos • Cómo configurar HTTPS en asp.net core • https://www.blinkingcaret.com/2017/03/01/https-asp-net-core/

    • .NET Secret Manager • https://blogs.msdn.microsoft.com/mihansen/2017/09/10/managing-secrets-in-net-core-2-0-apps/ • Más acerca de Authenticación con tokens • https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide Referencias • https://auth0.com/blog/securing-asp-dot-net-core-2-applications-with-jwts/ • https://www.recaffeinate.co/post/enforce-https-aspnetcore-api/ • Diagramas de google search images.