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-Basisauthentifizierung

Die HTTP-Authentifizierung basic ist eine Methode, mit der der Kunde bei einer Anfrage einen Benutzernamen und ein Passwort angeben kann.

Dies ist die einfachste Möglichkeit, die Zugriffskontrolle durchzusetzen, da keine Cookies, Sitzungen oder andere Elemente erforderlich sind. Um dies zu nutzen, muss der Client die senden Genehmigung zusammen mit jeder Anfrage, die Sie machen. Der Name von Nutzername und das Passwort Sie sind nicht verschlüsselt, aber sie sind wie folgt aufgebaut:

Der Benutzername und das Passwort werden zu einer einzigen Zeichenfolge verkettet: Benutzername Passwort Diese Zeichenfolge ist Base64-codiert

Das Schlüsselwort BASIC wird vor diesen fest codierten Wert gestellt

Beispiel für einen Benutzer namens juan mit einem geheimen Passwort:

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

Die Implementierung ist auch in Node.js ziemlich einfach - das folgende Code-Snippet zeigt, wie Sie eine erstellen können Express Middleware es zu tun.


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

Natürlich können Sie dies auf einer höheren Ebene tun, wie in Nginx.

Klingt einfach, oder? Was sind die Nachteile der Verwendung der HTTP-Basisauthentifizierung?

Die Nachteile:

  • Der Benutzername und das Kennwort werden bei jeder Anforderung gesendet, wodurch sie möglicherweise offengelegt werden, selbst wenn sie über eine sichere Verbindung gesendet werden, mit der eine Verbindung besteht 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, wenn eine Website eine schwache Verschlüsselung verwendet oder ein Angreifer diese beschädigen kann,
  • Benutzernamen und Kennwörter werden sofort angezeigt. Es gibt keine Möglichkeit, den Benutzer mithilfe der Basisauthentifizierung abzumelden. Das Ablaufen von Anmeldeinformationen ist nicht trivial. Sie müssen den Benutzer bitten, das Kennwort zu ändern, um dies zu tun.

Kekse

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. Das 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 PlätzchenUna 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.

Um Cookies für Authentifizierungszwecke zu verwenden, müssen einige wichtige Prinzipien befolgt werden.

Verwenden Sie immer HttpOnly-Cookies

Verwenden Sie immer das Flag, um die Möglichkeit von XSS-Angriffen zu verringern HttpOnly beim Setzen von Cookies. Auf diese Weise werden sie nicht in angezeigt document.cookies.

Verwenden Sie immer signierte Cookies

Mit signierten Cookies kann ein Server feststellen, ob der Client ein Cookie geändert hat.

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:

Verwendung von Chrome-Cookies

Die Nachteile:

  • Sie müssen noch einen Schritt weiter gehen, um CSRF-Angriffe abzuschwächen
  • Inkompatibilität mit REST, da ein Status in ein zustandsloses Protokoll eingeführt wird

Aufzeichnungen

Heute ist JWT (JSON Web Token) überall; Die potenziellen Sicherheitsprobleme sind jedoch einen Blick wert.

JWT besteht aus drei Teilen:

  • Header: que contiene el tipo de token y el AlgorithmusUn 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
  • Nutzvolle Ladung: mit den Ansprüchen.
  • Feste: 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)

Hinzufügen JWT zu Anwendungen Koa Es sind nur ein paar Codezeilen:

var koa = erfordern ('koa'); var jwt = require ('koa-jwt'); var app = koa (); app.use (jwt ({secret: 'very-secret'})); // Geschützte Middleware app.use (function * () {// Der Inhalt des Tokens ist in this.state.user verfügbar. This.body = {secret: '42'};});

Anwendungsbeispiel:

curl --header „Authorization: Inhaber eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRJONY7DMXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRJONW4GRG9lIiwiOWRJONW4OrZOrZB siteBuyWRJONY7MVCJM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRJONY9DrG9lIiwiYWRJONW4OrZOrZBrsiteBuyWRJONW4OrZBrgsite

Wie die vorherigen können die Token auch in Chrome beobachtet werden:

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 Lokaler Speicher oder SessionStorage, Dies kann zu XSS-Angriffen führen.

Die Nachteile:

  • Sie müssen die Extrameile gehen, um XSS-Angriffe abzuschwächen

Firmen

Unabhängig davon, ob Sie Cookies oder Token verwenden, wenn die Transportschicht aus irgendeinem Grund verfügbar ist, sind Ihre Anmeldeinformationen leicht zugänglich, und mit einem Token oder Cookie kann sich der Angreifer wie der echte Benutzer verhalten.

Eine Möglichkeit, dies zu lösen, zumindest wenn es um die API und nicht um den Browser geht, besteht darin, jede Anfrage zu signieren. Wie können wir das machen?

Wenn ein Verbraucher einer API eine Anfrage stellt, muss er diese signieren, was bedeutet, dass er eine erstellen muss Hash der gesamten Anfrage mit einem privaten Schlüssel. Für diese Hash-Berechnung können Sie Folgendes verwenden:

  • HTTP-Methode
  • Pfad anfordern
  • ÜberschriftenConcepto 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-Prüfsumme
  • und einen privaten Schlüssel zum Erstellen des Hash

Damit dies funktioniert, müssen sowohl der API-Consumer als auch der Provider denselben privaten Schlüssel haben. Sobald Sie die Signatur haben, müssen Sie sie der Anfrage hinzufügen, entweder in Abfragezeichenfolgen oder in HTTP-Headern. Außerdem muss ein Datum hinzugefügt werden, damit Sie ein Ablaufdatum definieren können.

Warum all diese Schritte durchlaufen? Denn selbst wenn die Transportschicht kompromittiert ist, kann ein Angreifer nur Ihren Datenverkehr lesen. Er kann nicht als Benutzer fungieren, da der Angreifer keine Anforderungen signieren kann, da der private Schlüssel nicht in seinem Besitz ist. Die meisten AWS-Services verwenden diese Art der Authentifizierung.

Node-http-Signatur befasst sich mit der Signatur von HTTP-Anfragen und ist einen Besuch wert.

Die Nachteile:

  • Kann nicht in Browser / Client verwendet werden, nur zwischen APIs

Einmalpasswörter

Einmalkennwortalgorithmen generieren ein Einmalkennwort mit einem gemeinsamen Geheimnis und der aktuellen Zeit oder dem aktuellen Zähler:

  • Einmalkennwortalgorithmus zeitbasiert, basiert auf der aktuellen Zeit.
  • Einmalkennwortalgorithmus basierend auf HMACbasiert auf einem Zähler.

Diese Methoden werden in Anwendungen verwendet, die die Zwei-Faktor-Authentifizierung nutzen: Ein Benutzer gibt den Benutzernamen und das Kennwort ein, und sowohl der Server als auch der Client generieren ein Einmalkennwort.

Implementieren Sie dies in Node.js mit Nicht p es ist relativ einfach.

Nachteile:

  • Mit gemeinsam genutzten geheimen Benutzertoken (falls gestohlen) können sie emuliert werden
  • Da Clients gestohlen werden können, verfügen alle Echtzeitanwendungen über Methoden, um dies zu vermeiden, z. B. einen E-Mail-Reset, der der Anwendung zusätzliche Angriffsmethoden hinzufügt
Welche Webauthentifizierungsmethode soll wann gewählt werden?

Wenn Sie nur eine Webanwendung unterstützen müssen, sind Cookies oder Token in Ordnung. Denken Sie bei Cookies an XSRF, damit JWT sich um XSS kümmert.

Wenn Sie eine Web-App und einen mobilen Client unterstützen müssen, verwenden Sie eine API, die die tokenbasierte Authentifizierung unterstützt.

Wenn Sie APIs erstellen, die miteinander kommunizieren, verwenden Sie besser die Anforderungssignatur.