JWT (JSON Web Token) Introducción

¿Qué es JSON Web Token

JSON Web Token (abreviatura JWT) es la mayor cantidad de soluciones de autenticación entre dominios populares, este artículo describe cómo funciona y su uso.
La primera es la cuestión de la autenticación entre dominios
de servicios de Internet no se puede prescindir de la autenticación de usuarios. Por lo general, este proceso es el siguiente.
1, el usuario envía el nombre de usuario y contraseña para el servidor.
2, la autenticación de servidor se pasa, los datos en el interior sesión actual (sesión), tales como funciones de usuario, el tiempo de inicio de sesión, y así sucesivamente almacenan.
3, el servidor devuelve al usuario una galleta de la escritura session_id usuario.
4. El usuario entonces cada petición voluntad por la galleta, la parte posterior session_id al servidor.
5, el servidor recibe SESSION_ID, encontrar los datos almacenados previamente, por lo tanto, representa la identidad del usuario.
El problema con este modelo es que, escalabilidad (escalamiento) no es bueno. Curso independiente, no hay problema, si se trata de un grupo de servidores, o entre dominios
arquitectura orientada a servicios, que requiere el intercambio de datos de sesión, cada servidor puede leer la sesión.
Por ejemplo, A y B Sitios sitios están asociados con el servicio de una empresa. Ahora se requiere, siempre que el inicio de sesión de usuario en uno de los sitios de revisita
pedir otro sitio web registrará automáticamente, preguntar cómo lograr?
Una solución es la persistencia de datos de sesión, por escrito a la base de datos u otra capa de persistencia. Después de la recepción de los servicios de solicitud, por favor tenga la persistencia de
datos de la solicitud. La ventaja de este enfoque es estructura obvia, la desventaja es más grande que la ingeniería. Además, en caso de persistencia colgante, voluntad punto único de fallo.
Otra opción es simplemente el servidor no guarda datos de la sesión, y todos los datos se almacenan en el cliente, cada vuelta petición al servidor.
JWT es un representante de este programa.

principio JWT

JWT principio es, después de servidor de autenticación genera una copia de objeto JSON para el usuario:

{
	"姓名": "Joey",
	"角色": "管理员",
	"到期时间": "2020年2月14日0点0分"
}

Más tarde, el usuario y la comunicación servidor cuando debe devolver el objeto JSON. Servidor confían completamente en el usuario identificado objeto.
Para evitar que los usuarios manipulen los datos, el servidor al generar el objeto, será añadir una firma (más sobre esto más adelante).
El servidor no guarda ninguna datos de la sesión, y que es, se convierta en un servidor sin estado, y por lo tanto relativamente fácil de lograr la expansión.
estructura de datos JWT
JWT un largo camino:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4
gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Es una cadena muy larga, separado en tres secciones por un punto (.). Tenga en cuenta que la JWT interna es sin saltos de línea, y aquí sólo para la
conveniencia de representar, que será escrito en unas pocas líneas.
JWT siguiente secuencialmente tres secciones:
Header (de cabecera)
de carga útil (carga)
de la Firma (Firmado)
en una sola línea:

Header.Payload.Signature

Encabezamiento

sección de cabecera es un objeto JSON, metadatos JWT describe generalmente como la siguiente:

{
	"alg": "HS256",
	"typ": "JWT"
}

Por encima de código, alg propiedad indica el algoritmo de firma (algoritmo), por defecto HMAC SHA256 (escrito HS256); típ
atributo indica el testigo (token) de tipo (tipo), JWT símbolo unificado escrito como JWT.
Finalmente, el objeto anterior usando JSON Base64URL algoritmo (más sobre esto más adelante) se tradujo en cuerdas.

Carga útil

Carga útil es parte de un objeto JSON, que se utiliza para almacenar se requiere la transferencia de datos real. JWT prevé siete ámbito oficial para la selección:
ISS (Emisor): Emisor
exp (fecha de caducidad): tiempo de caducidad
sub (sujeto): El tema
aud (público): Audiencia
NBF (no antes): Tiempo efectivo
IAT (Emitido En ): la cuestión del tiempo
ITC (JWT ID): No.
además del ámbito oficial, también se puede definir un campo privado en esta sección:

{
	"sub": "1174051426",
	"name": "Joey Tribiani",
	"admin": true
}

Tenga en cuenta, por defecto JWT no está encriptado, cualquiera puede leer, así que no introduzca información confidencial en esta sección. El objeto JSON
debe utilizar el algoritmo Base64URL traducido en cuerdas.

Firma

Firma es una parte de la firma de las dos primeras partes, impiden la falsificación de datos.
En primer lugar, es necesario especificar una clave (secreta). La clave está en saber sólo el servidor no puede ser compartida con el usuario. Entonces, una
cabecera que el algoritmo de firma especificado (por defecto HMAC SHA256), generar una firma de acuerdo con la siguiente ecuación.

HMACSHA256(
	base64UrlEncode(header) + "." +
	base64UrlEncode(payload),
secret
)

Después de calcular la firma, la cabecera, la carga útil, Firma conforma una cadena de tres partes, (.) En "punto" porciones entre cada
partición, pueden ser devueltos al usuario.

Base64URL

Mencionado, encabezado y la carga de Base64URL tipo de algoritmo de secuencia. Este algoritmo base 64 con el algoritmo esencialmente similar, pero hay
algunas diferencias menores.
JWT como símbolo (token), una situación que puede poner un poco de URL (como api.example.com/?token=xxx).
Hay tres caracteres Base64 +, /, y =, que tienen un significado especial en la URL, es que debe sustituirse: = se omite, reemplazado +
a -, / _ reemplazado. Este algoritmo es Base64URL.

el uso de JWT

JWT cliente recibe el servidor devuelve, que pueden almacenarse en la galleta, también se pueden almacenar en el almacenamiento local.
A partir de entonces, cada vez que las comunicaciones de cliente y servidor, debe traer la JWT. Se puede poner en el interior de la galleta envía automáticamente, pero este
tipo no puede ser de varios dominios, por lo que un mejor enfoque consiste en campo de cabecera de Autorización en la petición HTTP en el interior.

Authorization: Bearer <token>

Otro enfoque es que cuando multidominio, JWT Publicar demanda para el volumen de datos en el interior.

JWT varias características

(1) predeterminado JWT no está cifrada, pero también puede ser encriptado. Después de generar la Señal original, que puede ser re-encriptado con una clave de una sola vez.
(2) en el caso JWT sin cifrado, datos secretos no puede escribirse en JWT.
(3) JWT no sólo se puede utilizar para la autenticación, sino que también puede ser utilizado para el intercambio de información. El uso eficaz de JWT, el servidor secundario puede reducir la consulta a la base
número.
(4) JWT mayor inconveniente es que, debido a que el servidor no guarda el estado de sesión, y por lo tanto no puede derogar una ficha, o en el curso de
las autoridades para cambiar el token. Es decir, una vez emitida JWT, se mantendrá vigente hasta su vencimiento, a menos que el servidor para desplegar adicional de
la lógica.
(5) JWT su vez contiene información de autenticación, cuando se da a conocer, cualquier persona puede obtener todos los permisos de la ficha. Para reducir el robo, JWT
validez 's debe ajustarse relativamente corto. Para algunos de los derechos más importantes, debe una vez más para autenticar al usuario durante el uso.
(6) Con el fin de reducir el fraude, los códigos JWT utilizando el protocolo HTTP no deben ser transmitidos, para utilizar el protocolo HTTPS.

Se han publicado 19 artículos originales · ganado elogios 0 · Vistas 277

Supongo que te gusta

Origin blog.csdn.net/Joey_Tribiani/article/details/104320006
Recomendado
Clasificación