Token OAuth2.0-JWT

A través de las pruebas de Spring Cloud Security OAuth2, descubrimos que cuando el servicio de recursos y el servicio de autorización no están juntos, el servicio de recursos utiliza RemoteTokenServices para solicitar de forma remota el token Tan Zheng del servicio de autorización. Las visitas son grandes, afectará el rendimiento del sistema.

Para resolver el problema anterior, puede utilizar el formato JWT. Después de que el usuario pase la autenticación, obtendrá un token JWT. El token JWT ya contiene información relacionada con el usuario. para llevarlo, JWT accede al servicio de recursos, y el servicio de recursos completa la verificación del token por sí solo de acuerdo con el algoritmo previamente acordado, sin requerir que el servicio de autenticación complete la verificación cada vez.

1. ¿Qué es JWT?

JSON Web Token (JWT) es un estándar industrial abierto (RFC 7519) que define un formato de protocolo breve e independiente para transmitir objetos json e información entre partes que se comunican. Las firmas digitales pueden verificarse y ser confiables. . JWT se puede firmar utilizando el algoritmo HMAC o el par de claves pública/privada RSA para evitar manipulaciones.

Sitio web oficial de JWT, estándar JWT

Ventajas del token JWT:

1) JWT se basa en json y es muy conveniente de analizar.

2) El contenido enriquecido se puede personalizar en el token, que es fácil de expandir.

3) A través de un algoritmo de cifrado asimétrico y tecnología de firma digital, JWT evita la manipulación y tiene una alta seguridad.

4) Los servicios de recursos utilizan JWT para completar la verificación y autorización sin depender de los servicios de autenticación.

Desventajas de los tokens JWT:

1) Los tokens JWT son más largos y ocupan un mayor espacio de almacenamiento.

2. Estructura del token JWT

Establezca una base sólida para personalizar los tokens JWT aprendiendo la estructura del token JWT.

El token JWT consta de tres partes (Encabezado, Carga útil, Firma), cada parte está separada por un punto (.), por ejemplo: 9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ).

1) Encabezado

El encabezado incluye el tipo de token (es decir, JWT) y el algoritmo hash utilizado (como HMACSHA256 o RSA). El siguiente es el contenido de la parte del encabezado. :

p>

2) Carga útil

La segunda parte es la carga útil. El contenido también es un objeto json. Es un lugar para almacenar información válida. campos listos para usar proporcionados por jwt, como: iss (emisor), exp (marca de tiempo de vencimiento), sub (para usuarios), etc. También puede personalizar los campos. No se recomienda almacenar información confidencial en esta sección porque esta sección se puede decodificar para restaurar el contenido original. Codifique la segunda parte de la carga útil utilizando Base64Url y obtenga una cadena que sea la segunda parte del token JWT.

3) Firma

La tercera parte es la firma, que se utiliza para evitar que el contenido jwt sea manipulado.

Esta parte usa Base64Url para codificar las dos primeras partes. Después de codificar, use puntos (.) para conectarse para formar una cadena y finalmente use el algoritmo de firma declarado en el encabezado para firmar.

base64UrlEncode(header): la primera parte del token jwt, Header.

base64UrlEncode(carga útil): la segunda parte de la carga útil del token jwt.

your-256-bit-secret: La clave secreta utilizada para la firma.

Configurar el servicio de token jwt en UAA puede generar tokens en formato jwt.

1. TokenConfig

2. Definir el servicio de token JWT AuthorizationServer

El servicio de recursos debe tener la misma firma, servicio de token, etc. que el servicio de autorización :

p>

1. Copie la clase TokenConfig en el servicio de autorización al proyecto del servicio de recursos.

2. Bloquee la clase de servicio de token original en el servicio de recursos y ya no use HTTP para llamar al servicio de autorización para verificar el token JWT.