JWT detallada

¿Cuál es el JWT 

     JSON símbolo web (JWT) es una declaración con el fin de pasar entre el entorno de ejecución de aplicaciones de red estándares de desarrollo basados ​​en JSON (RFC 7519), el testigo está diseñado para ser compacto y seguro, especialmente para sitios distribuidos a un único punto de aterrizaje ( SSO) escenarios. La declaración de JWT se utiliza generalmente entre los proveedores de identidad y proveedores de servicios para entregar la información de identidad del usuario autenticado con el fin de obtener recursos del servidor, también se puede añadir alguna otra información necesaria declaración lógica de negocio adicional, el token también puede ser utilizado directamente para la autenticación se puede cifrar.

  origen

   Hablando de JWT, deberíamos hablar de la diferencia entre la autenticación y certificación de Sesión tradicional basada en token.

  autenticación de sesión tradicional

    Sabemos protocolo, http sí es un protocolo sin estado, y esto significa que si el usuario proporciona un nombre de usuario y contraseña a nuestra solicitud de autenticación de usuario, a continuación, la siguiente petición de tiempo, el usuario debe volver a realizar la autenticación del usuario antes OK, ya que, de acuerdo con el protocolo http, no podemos saber qué petición del usuario se envía, por lo que con el fin de hacer que nuestra aplicación puede identificar qué problemas de los usuarios, sólo podemos servidor almacena la información en un inicio de sesión del usuario, esta información de inicio de sesión aprobada en respuesta al servidor, diciendo a guardarlo como una galleta, que nos ha enviado la próxima vez que la solicitud de aplicación, por lo que podemos identificar dos años a partir del cual británica peticiones de los usuarios, y esto se basa en la certificación sessino tradicional

       Pero esta sesión se basa en la solicitud de certificación en sí difíciles de conseguir, por extensión, sin aumento de cliente, servidor independiente no puede albergar más usuarios, pero se dará a conocer esta sesión de tiempo en el tema de las solicitudes de certificación

  problemas de autenticación basados ​​en la sesión revelaron

       Sesión: Cada autenticación de usuario después de nuestra solicitud, nuestra aplicación en el servidor debe hacer un registro, por lo que la próxima vez la autenticación de las peticiones del usuario, la sesión general se almacenan en la memoria, y con el aumento del usuario autenticado , se incrementará significativamente el costo del servidor

        Escalabilidad: Después de la autenticación del usuario, haciendo el registro de autenticación del servidor, si los registros autenticados se almacenan en la memoria, entonces significa que el usuario solicita la siguiente petición debe ser también en este servidor, con el fin de obtener la autorización de los recursos, por lo en aplicaciones distribuidas, que limita la capacidad de responder al equilibrador de carga, pero también significa que los límites de la escalabilidad de la aplicación

        CSRF: Debido a que se basa en una cookie para identificar al usuario, si se intercepta la cookie, el usuario podría ser vulnerable a ataques de cross-site solicitud falsificación.

El mecanismo de autenticación basada en token

    Al igual que en el protocolo HTTP no tiene mecanismo de autenticación basada en token, que no requiere el servidor para retener la información de información de autenticación o sesión del usuario. Esto significa que la aplicación no requiere mecanismo de autenticación oportunidad tokent considerar qué servidor el usuario inicia sesión. Esta aplicación proporciona una extensión conveniente

     proceso tal es

  • El usuario solicita al servidor utilizando el nombre de usuario y contraseña
  • Servidor para la autenticación de la información del usuario
  • El servidor envía al usuario mediante la verificación de un contador
  • token de almacenamiento del cliente, el token y los valores adicionales por solicitud
  • token de autenticación del servidor, y devuelve los datos

      Esta señal debe ser enviado con cada solicitud al servidor, se debe tener en el encabezado de la solicitud, además, el servidor de apoyo a los CORS (de origen cruzado de intercambio de recursos) estrategia, que normalmente hacemos en Access-Control-Permitir servidor -origen: *

constitución de JWT

      JWT se compone de tres partes, estas tres piezas de información constituyen un vínculo con la cadena de texto JWT. como este

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVc2VySWQiOjEyMywiVXNlck5hbWUiOiJhZG1pbiJ9.Qjw1epD5P6p4Yy2yju3-fkq28PddznqRj3ESfALQy_U

    La primera parte que llamamos la cabeza (cabecera) de la segunda parte de nuestra carga de llamadas (carga útil, similar a los objetos transportados en el avión), y la tercera parte es la visa (firma)

   encabezamiento

      JWT dos piezas de información transportada por la cabeza:

  • Declarado tipo, aquí está jwt
  • Aserción del algoritmo de cifrado se utiliza generalmente directamente HMAC SHA256

   Complete el siguiente JSON cabeza como esto

{ 
     'Tip': 'JWT', 
     'alg': 'HS256'   
}

    A continuación, la cabeza base64-encriptación (el cifrado puede ser descifrado simétrico), constituye la primera parte

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

    plyload

      Cargar el almacenamiento local es información válida. El nombre se refiere específicamente a tales mercancías transportadas en la aeronave, estos información eficaz consta de tres partes

  • declaración de registro estándar
  • Declaración pública
  • declaración privada 

     declaración de marca registrada (no se recomienda el uso obligatorio)

  • ISS JWT emisor
  • sub JWT para el usuario
  • aud: el lado de recepción jwt
  • Exp: tiempo de expiración JWT, la fecha de caducidad debe ser mayor que la cuestión del tiempo
  • MNB: ¿A qué hora se define antes de la JWT no están disponibles
  • IAT JWT la cuestión del tiempo
  • ITC: JWT identidad única, se utiliza principalmente como una muestra de una sola vez, con el fin de evitar un ataque de repetición 

    Declaración pública:

       declaraciones públicas pueden añadir cualquier información, información general sobre el usuario para añadir la información necesaria u otras necesidades del negocio, pero no recomienda la adición de información sensible, debido a que la parte del cliente puede descifrar;

     declaración privada

         declaración privada es un proveedor de declaraciones de funciones definidas por el consumidor y por lo general no se recomienda para almacenar información sensible, debido base 64 se descifran simétrica, lo que significa que parte de la información se pueden clasificar en nombre de la información de texto.

     Definir una carga útil

{ 
  "Sub": "1234567890", 
  "name": "John Doe", 
  "admin": true 
}

    Base64 entonces encripta la parte jwt obtenida

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

Firma

    La tercera parte es una información de visas JWT, esta información visado consta de tres partes:

  • cabecera (después de la base64)
  • carga útil (después de la base64)
  • secred     

       En esta parte se tiene que utilizar el encabezado de base 64 la carga útil y la base 64 de cifrado cifrada. "" Conectado para formar una cadena, y luego añadiendo secreta encriptada por las composiciones de cabecera de cifrado declarados, y la tercera parte constituye el jwt

      

var encodedString = base64UrlEncode (cabecera) + '' + Base64UrlEncode (carga útil); 
firma var = HMACSHA256 (encodedString, 'secreto'); // TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

    Relación con estas tres piezas en una cadena completa, constituye el jwt final "":

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

     Nota: secreta se almacena en el servidor, JWT publicará también en el lado del servicio, secreto se utiliza para autenticar la emisión y jwt de JWT, por lo que es la clave privada de su servidor, no debe ser revelada a cualquier escenario, una vez que el cliente final que este secreto, que significa que el cliente puede autofirmado JWT la

 solicitud 

      generalmente se añade en la solicitud de autorización previa, que se denota portador y además:

fetch ( 'api / usuario / 1', { 
  encabezados: { 
    'autorización': 'portador' + contador 
  } 
})

       Los servidores verifica el token, si se verifica devolverá los recursos apropiados, todo el proceso es tan

   resumen

      ventajas:

  • Debido a la versatilidad de JSON, por lo que puede soportar JWT entre lenguajes, como C #, JavaScript, NodeJS, PHP y muchos otros idiomas se pueden utilizar
  • Debido a la parte de carga útil, la lógica de negocio JWT puede almacenar alguna otra información necesaria en su propio no sensibles
  • Facilidad de transporte, la configuración es JWT pequeñas bytes muy simples, ocupados, lo que es muy fácil de transportar
  • No requiere el servidor para guardar información de la sesión, por lo que es fácil de extender la aplicación

       relacionados con la seguridad

  • No debemos almacenar información confidencial en una porción de carga útil de JWT, debido a que la porción es parte del cliente puede descifrar
  • Proteger la clave privada secreta. La clave privada es muy importante
  • Si puede, por favor utilice el protocolo https

Supongo que te gusta

Origin www.cnblogs.com/yhq123/p/12612045.html
Recomendado
Clasificación