En la lección de hoy vamos a comenzar con la más básica, la autenticación HTTPEl HTTP (Hyper Text Transfer Protocol) es un protocolo que se usa para transmitir datos en redes. HTTP es un estándar técnico generalmente aceptado que establece cómo un cliente web se comunica con un servidor para que los datos solicitados por el cliente puedan ser cargados y mostrados. Información general Junto con el URL y el HTML, HTTP es uno de los conceptos más importantes de Internet (www). Fue desarrollado plus básica, continuaremos con las cookies y los tokens , y terminaremos con firmas y contraseñas de un solo uso. Sigue leyendo para que aprendas todo acerca de esto.

HTTP basic authentication

The HTTP authentication basic is a method for the customer to provide a username and password when making a request.

This is the simplest possible way to enforce access control, as it does not require cookies, sessions, or anything else. To use this, the client must send the Authorization along with every request you make. The name of Username and the password they are not encrypted, but they are constructed like this:

The username and password are concatenated into a single string: username: password this string is Base64 encoded

The key word BASIC is placed before this hardcoded value

Example for a user named juan with a secret password:

curl --header "Authorization: Basic am9objpzZWNyZXQ =" my-website.com

Implementing it is pretty easy in Node.js too - the following code snippet shows how you can make a Express middleware to do it.


import basicAuth from 'basic-auth';

function unauthorized(res) {
res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return res.send(401);
};

export default function auth(req, res, next) {
const {name, pass} = basicAuth(req) || {};

if (!name || !pass) {
return unauthorized(res);
};

if (name === 'juan' && pass === 'secreta') {
return next();
}
return unauthorized(res);
};

Of course, you can do it at a higher level, like in nginx.

Sounds simple, right? So what are the downsides of using HTTP Basic Authentication?

The cons:

  • The username and password are sent with every request, potentially exposing them, even if they are sent over a secure connection connected to SSLLa encriptación SSL (Secure Socket Layer) proporciona una conexión segura entre el cliente y el servidor. Consiste en un protocolo de Internet que permite encriptar datos sensibles (como información de pago, datos de tarjetas de crédito) y hacerlos ilegibles a terceros. Al mismo tiempo, un certificado confirma que el servidor es fiable. En este momento, además se le llama TLS (Transport Layer Security). Relevancia SSL es un método de cifrado plus / TLS, if a website uses weak encryption or an attacker can break it,
  • Usernames and passwords will be exposed immediately there is no way to log out the user using basic authentication, the expiration of credentials is not trivial - you have to ask the user to change the password to do so.

cookies

Cuando un serverLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en plus recibe una solicitud HTTP en la respuesta, puede enviar un encabezado Set-Cookie. The browserUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los plus lo coloca en un contenedor de cookies, y la cookieUna cookie es un registro que es almacenado por un servidor web en el disco duro del usuario. El archivo recibido es una combinación de caracteres formada por números y letras, que asigna una cierta identidad al usuario (cliente). No podrán exceder un tamaño máximo de 4 KB y contendrán, por ejemplo, información sobre la extensión de la visita o sobre lo que el usuario haya pulsado. Cuando el cliente plus se enviará junto con cada solicitud realizada al mismo origen en el encabezado Cookie HTTP.

To use cookies for authentication purposes, there are a few key principles that must be followed.

Always use HttpOnly cookies

To mitigate the possibility of XSS attacks, always use the flag HttpOnly when setting cookies. This way they will not appear in document.cookies.

Always use signed cookies

With signed cookies, a server can tell if the client modified a cookie.

Más adelante, todas las solicitudes utilizan las cookies establecidas para el domainUn dominio es una sección de Internet con direcciones que comparten un sufijo común o están bajo el control de una organización o individuo en particular. Está organizado jerárquicamente. Tanto los objetos físicos como los virtuales pueden ser direccionados con el nombre de dominio. Estos objetos pueden ser webs, ordenadores en red o servicios, como impresoras, faxes o servidores de correo. Cada objeto está referenciado por una dirección IP única, plus dado:

Use of Chrome cookies

The cons:

  • Need to go the extra mile to mitigate CSRF attacks
  • Incompatibility with REST as it introduces a state into a stateless protocol

Records

Today, JWT (JSON Web Token) is everywhere; the potential security issues are worth a look though.

JWT consists of three parts:

  • Header: que contiene el tipo de token y el algorithmUn algoritmo es un procedimiento o conjunto de reglas a seguir en los cálculos u otras operaciones de resolución de problemas, fundamentalmente por un PC. Apps Un ejemplo de la vida cotidiana es una receta para hornear un pastel. Siguiendo los pasos de la receta se obtiene el pastel deseado al final. Otras apps conocidas son la búsqueda y clasificación. ¿Cómo se puede hallar un canal de televisión de la plus de hash
  • Useful load: containing the claims.
  • Firm: que puede calcularse de la siguiente manera si elige HMAC SHA256: HMACSHA256( base64UrlEncode(headerConcepto de Header¿Qué es el Header?El Header, encabezado en español, es una definición que se usa en el terreno del diseño y la programación web para referirse a la parte de arriba de una página. Se trata del primer punto a ver por cualquier usuario que entra en un portal web, por lo que cuenta con una responsabilidad enorme y ha de contener la carga informativa esencial para mostrar la plus) + «.» + base64UrlEncode(payload), secret)

Add JWT to applications Koa it's just a couple of lines of code:

var koa = require ('koa'); var jwt = require ('koa-jwt'); var app = koa (); app.use (jwt ({secret: 'very-secret'})); // Protected middleware app.use (function * () {// the content of the token will be available in this.state.user this.body = {secret: '42'};});

Example of use:

curl --header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRJONYQDXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiOWRJONYQRG9lIiwiYWRJONW4OrZOrZBrsiteBuyWRJONW4GRG9lIiwiYWRJONY7MyGsiteBuyByWRtaW4GRG9lIiwiYWRJONW4OrZOrZSiteBuyWRTaW4gRG9lIiwiYWRJONW4OrZOrZSiWo9WRTaW4Gsite

Like the previous ones, the tokens can also be observed in Chrome:

Si está escribiendo APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene plus para aplicaciones móviles nativas o SPA, JWT puede ser una buena opción para ti. Una cosa a tener en cuenta: para usar JWT en el navegador, debe almacenarlo en LocalStorage or SessionStorage, which can lead to XSS attacks.

The cons:

  • Need to go the extra mile to mitigate XSS attacks

Firms

Whether using cookies or tokens, if the transport layer is exposed for any reason, your credentials are easy to access, and with a token or cookie the attacker can act like the real user.

One possible way to solve this, at least when it comes to the API and not the browser, is to sign every request. How can we do it?

When a consumer of an API makes a request, they must sign it, which means they must create a hash of the entire request using a private key. For that hash calculation you can use:

  • HTTP method
  • Request path
  • HeadersConcepto de Encabezados¿Qué son los Encabezados?Los Encabezados, además conocidos como headers en inglés, son una parte fundamental del diseño de cualquier web, dado que consiste en la parte principal que se ve de esta al acceder, la parte de arriba de cualquier página. El lugar más visible y al que todos los usuarios que visitan un lugar de Internet acceden cuando entran en él, pudiendo tener así una imagen rápida plus HTTP
  • HTTP payload checksum
  • and a private key to create the hash

For this to work, both the API consumer and the provider must have the same private key. Once you have the signature, you need to add it to the request, either in query strings or HTTP headers. In addition, a date must also be added, so that you can define an expiration date.

Why go through all these steps? Because even if the transport layer is compromised, an attacker can only read your traffic, he will not be able to act as a user, since the attacker will not be able to sign requests, since the private key is not in his possession. Most AWS services are using this type of authentication.

node-http-signature deals with HTTP request signing and is worth checking out.

The cons:

  • Cannot be used in browser / client, only between APIs

One-time passwords

One-time password algorithms generate a one-time password with a shared secret and the current time or counter:

  • One-time password algorithm time based, is based on the current time.
  • One-time password algorithm based on HMAC, is based on a counter.

These methods are used in applications that take advantage of two-factor authentication: a user enters the username and password, and both the server and the client generate a one-time password.

In Node.js, implement this using notp it is relatively easy.

Cons:

  • With shared secret user tokens (if stolen) they can be emulated
  • because clients can be stolen, all real-time applications have methods to avoid this, such as an email reset that adds additional attack vectors to the application
Which web authentication method to choose when?

If you only have to support one web application, cookies or tokens are fine. For cookies, think of XSRF, so JWT takes care of XSS.

If you have to support a web app and mobile client, use an API that supports token-based authentication.

If you are creating APIs that communicate with each other, better use request signing.