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 Suite 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.

Authentification de base HTTP

La Authentification HTTP basic est une méthode permettant au client de fournir un nom d'utilisateur et un mot de passe lors d'une demande.

C'est le moyen le plus simple possible d'appliquer le contrôle d'accès, car il ne nécessite pas de cookies, de sessions ou quoi que ce soit d'autre. Pour l'utiliser, le client doit envoyer le Autorisation avec chaque demande que vous faites. Le nom de Nom d'utilisateur et la le mot de passe ils ne sont pas chiffrés, mais ils sont construits comme ceci:

Le nom d'utilisateur et le mot de passe sont concaténés en une seule chaîne: Identifiant Mot de passe cette chaîne est encodée en Base64

Le mot clé DE BASE est placé avant cette valeur codée en dur

Exemple pour un utilisateur nommé juan avec un mot de passe secret:

curl --header "Autorisation: Basic am9objpzZWNyZXQ =" mon-siteweb.com

L'implémenter est également assez facile dans Node.js - l'extrait de code suivant montre comment vous pouvez créer un Intergiciel express pour le faire.


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);
};

Bien sûr, vous pouvez le faire à un niveau supérieur, comme dans nginx.

Cela semble simple, non? Alors, quels sont les inconvénients de l'utilisation de l'authentification de base HTTP?

Les inconvénients:

  • Le nom d'utilisateur et le mot de passe sont envoyés avec chaque demande, les exposant potentiellement, même s'ils sont envoyés via une connexion sécurisée connectée à 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 Suite / TLS, si un site Web utilise un cryptage faible ou qu'un attaquant peut le casser,
  • Les noms d'utilisateur et les mots de passe seront immédiatement exposés, il n'y a aucun moyen de déconnecter l'utilisateur en utilisant l'authentification de base, l'expiration des informations d'identification n'est pas anodine - vous devez demander à l'utilisateur de changer le mot de passe pour le faire.

biscuits

Cuando un serveurLos 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 Suite recibe una solicitud HTTP en la respuesta, puede enviar un encabezado Set-Cookie. le le navigateurUn 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 Suite 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 Suite se enviará junto con cada solicitud realizada al mismo origen en el encabezado Cookie HTTP.

Pour utiliser des cookies à des fins d'authentification, il y a quelques principes clés qui doivent être suivis.

Utilisez toujours les cookies HttpOnly

Pour atténuer la possibilité d'attaques XSS, utilisez toujours l'indicateur HttpOnly lors de la configuration des cookies. De cette façon, ils n'apparaîtront pas dans document.cookies.

Utilisez toujours des cookies signés

Avec les cookies signés, un serveur peut dire si le client a modifié un cookie.

Más adelante, todas las solicitudes utilizan las cookies establecidas para el domaineUn 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, Suite dado:

Utilisation des cookies Chrome

Les inconvénients:

  • Besoin de faire un effort supplémentaire pour atténuer les attaques CSRF
  • Incompatibilité avec REST car il introduit un état dans un protocole sans état

Registres

Aujourd'hui, JWT (JSON Web Token) est partout; les problèmes de sécurité potentiels valent cependant le coup d'œil.

JWT se compose de trois parties:

  • Entête: que contiene el tipo de token y el algoritmoUn 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 Suite de hash
  • Charge utile: contenant les revendications.
  • Solidifier: que puede calcularse de la siguiente manera si elige HMAC SHA256: HMACSHA256( base64UrlEncode(entêteConcepto 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 Suite) + «.» + base64UrlEncode(payload), secret)

Ajouter JWT aux applications Koa ce n'est que quelques lignes de code:

var koa = require ('koa'); var jwt = require ('koa-jwt'); var app = koa (); app.use (jwt ({secret: 'très-secret'})); // Middleware protégé app.use (function * () {// le contenu du token sera disponible dans this.state.user this.body = {secret: '42'};});

Exemple d'utilisation:

boucle --header « Autorisation: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRJONYQDXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiOWRJONYQRG9lIiwiYWRJONW4OrZOrZBrsiteBuyWRJONW4GRG9lIiwiYWRJONY7MyGsiteBuyByWRtaW4GRG9lIiwiYWRJONW4OrZOrZSiteBuyWRTaW4gRG9lIiwiYWRJONW4OrZOrZSiWo9WRTaW4Gsite

Comme les précédents, les jetons peuvent également être observés dans 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 Suite 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 Stockage local ou Stockage de session, ce qui peut conduire à des attaques XSS.

Les inconvénients:

  • Besoin de faire un effort supplémentaire pour atténuer les attaques XSS

Entreprises

Que vous utilisiez des cookies ou des jetons, si la couche de transport est exposée pour une raison quelconque, vos informations d'identification sont faciles d'accès, et avec un jeton ou un cookie, l'attaquant peut agir comme l'utilisateur réel.

Une façon possible de résoudre ce problème, du moins en ce qui concerne l'API et non le navigateur, consiste à signer chaque demande. Comment pouvons-nous le faire?

Lorsqu'un consommateur d'une API fait une demande, il doit la signer, ce qui signifie qu'il doit créer un hacher de l'ensemble de la demande à l'aide d'une clé privée. Pour ce calcul de hachage, vous pouvez utiliser:

  • Méthode HTTP
  • Chemin de la demande
  • En-têtesConcepto 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 Suite HTTP
  • Somme de contrôle de la charge utile HTTP
  • et une clé privée pour créer le hachage

Pour que cela fonctionne, le consommateur d'API et le fournisseur doivent avoir la même clé privée. Une fois que vous avez la signature, vous devez l'ajouter à la requête, soit dans les chaînes de requête, soit dans les en-têtes HTTP. De plus, une date doit également être ajoutée afin que vous puissiez définir une date d'expiration.

Pourquoi franchir toutes ces étapes? Car même si la couche de transport est compromise, un attaquant ne peut lire que votre trafic, il ne pourra pas agir en tant qu'utilisateur, puisque l'attaquant ne pourra pas signer de requêtes, puisque la clé privée n'est pas en sa possession. La plupart des services AWS utilisent ce type d'authentification.

noeud-http-signature traite de la signature des requêtes HTTP et vaut le détour.

Les inconvénients:

  • Ne peut pas être utilisé dans le navigateur / client, uniquement entre les API

Mots de passe à usage unique

Les algorithmes de mot de passe à usage unique génèrent un mot de passe à usage unique avec un secret partagé et l'heure ou le compteur actuel:

  • Algorithme de mot de passe à usage unique basé sur le temps, est basé sur l'heure actuelle.
  • Algorithme de mot de passe à usage unique basé sur HMAC, est basé sur un compteur.

Ces méthodes sont utilisées dans les applications qui tirent parti de l'authentification à deux facteurs: un utilisateur entre le nom d'utilisateur et le mot de passe, et le serveur et le client génèrent un mot de passe à usage unique.

Dans Node.js, implémentez ceci en utilisant pas p c'est relativement facile.

Les inconvénients:

  • Avec les jetons d'utilisateurs secrets partagés (en cas de vol), ils peuvent être émulés
  • parce que les clients peuvent être volés, toutes les applications en temps réel ont des méthodes pour éviter cela, comme une réinitialisation des e-mails qui ajoute des vecteurs d'attaque supplémentaires à l'application
Quelle méthode d'authentification Web choisir quand?

Si vous ne devez prendre en charge qu'une seule application Web, les cookies ou les jetons conviennent. Pour les cookies, pensez à XSRF, donc JWT s'occupe de XSS.

Si vous devez prendre en charge une application Web et un client mobile, utilisez une API qui prend en charge l'authentification basée sur les jetons.

Si vous créez des API qui communiquent entre elles, mieux vaut utiliser la signature des demandes.