El futuro de la autenticación de tokens: una nueva tendencia en la autenticación sin estado



prefacio

Este bloguero utilizará CSDN para registrar la experiencia y el conocimiento que ha adquirido y aprendido personalmente en el camino para estudiar desarrollo de software. ¡Los amigos interesados ​​pueden prestar atención al bloguero! Quizás una persona puede ir rápido sola, ¡pero un grupo de personas puede ir más lejos!

1. Problemas con la autenticación de sesión

En los artículos anteriores, explicamos el proceso de uso detallado de Cookie y Sesión en el caso de inicio de sesión y la diferencia y la conexión entre ellos. Desde el uso de inicio de sesión de Cookie hasta el inicio de sesión de sesión, resuelve principalmente el problema de la inseguridad de la información del usuario. ¿El inicio de sesión de sesión? también tiene algunos problemas?

Sí, usar Session para la autenticación puede tener algunas desventajas en algunos casos, incluyendo principalmente los siguientes puntos:

  1. Presión de almacenamiento del lado del servidor: el uso de la sesión para la autenticación requiere almacenar los datos de la sesión del usuario en el lado del servidor. Si la cantidad de visitas al sitio web es muy grande, el servidor deberá almacenar y administrar una gran cantidad de datos de sesión, lo que aumentará la presión de almacenamiento y procesamiento en el servidor.

  2. Escalabilidad y equilibrio de carga: cuando un sitio web debe extenderse a varios servidores, es necesario asegurarse de que los datos de la sesión se puedan compartir y sincronizar entre diferentes servidores. Esto puede requerir el uso de herramientas o tecnologías adicionales para lograr el intercambio de datos de sesión y el equilibrio de carga, lo que aumenta la complejidad del sistema y los costos de mantenimiento.

  3. Servidor con estado: el uso de la sesión para la autenticación significa que el servidor debe mantener el estado de la sesión del usuario. Esto hace que el servidor tenga estado, lo que requiere un estado de sesión coherente entre las solicitudes de los usuarios. Esto puede limitar la escalabilidad horizontal del servidor y aumentar la complejidad del desarrollo y la depuración.

  4. Caducidad y administración de la sesión: la sesión debe establecer un tiempo de caducidad adecuado para proteger la seguridad y la privacidad del usuario. Si el tiempo de caducidad se establece demasiado corto, es posible que los usuarios necesiten iniciar sesión de nuevo con frecuencia; si el tiempo de caducidad se establece demasiado largo, aumentará el riesgo de secuestro de sesión. Además, los datos de sesión vencidos deben administrarse de manera adecuada para evitar almacenar demasiados datos de sesión no válidos.

  5. Soporte multidispositivo y multiplataforma: los datos de la sesión se almacenan en el lado del servidor y no se pueden compartir directamente entre dispositivos y plataformas. Si un usuario visita el mismo sitio web en diferentes dispositivos, se requieren mecanismos adicionales para administrar y sincronizar los datos de la sesión para garantizar que el estado de autenticación del usuario permanezca uniforme en todos los dispositivos.

Aunque existen algunos inconvenientes en el uso de Session para la autenticación, sigue siendo un mecanismo de autenticación ampliamente utilizado. En la práctica, se pueden combinar otras técnicas y estrategias para resolver estos problemas:

  1. Usar almacenamiento de tokens
  2. Almacenar el ID de sesión en la base de datos
  3. almacenar ID de sesión en redis

Sin embargo, si la base de datos falla en el método 2, afectará al servidor para obtener el ID de sesión de la base de datos. Por varias razones y necesidades, existe una tecnología llamada JWT (JSON Web Token). El método 3 está diseñado para volver a almacenar el caché. Esto artículo El artículo no lo mencionará primero. Para obtener más información, consulte la columna de Redis publicada más adelante. Entonces, entremos en el texto a continuación, aprendamos sobre otro mecanismo de autenticación de identidad: ¡Autenticación de token (token)!

2. ¿Qué es la autenticación Token (token)?

La autenticación de token es un mecanismo de autenticación sin estado que se utiliza para verificar la identidad de los clientes y autorizarlos a acceder a los recursos protegidos. En la autenticación de Token, el cliente obtiene un Token enviando una solicitud de autenticación al servidor de autenticación. Luego, el cliente lleva el Token como credencial al servidor para su verificación en solicitudes posteriores. El servidor verifica la validez y firma del Token, y autoriza al usuario a acceder a los recursos solicitados de acuerdo a la información del Token.

3. Proceso de autenticación de token (token)

Un proceso común de autenticación de Token (token) suele incluir los siguientes pasos:

  1. El cliente envía una solicitud de autenticación : el cliente (como una aplicación web o una aplicación móvil) envía una solicitud de autenticación al servidor de autenticación, generalmente a través del nombre de usuario y la contraseña para la autenticación.

  2. El servidor de autenticación verifica las credenciales : después de recibir una solicitud de autenticación, el servidor de autenticación verifica la validez de las credenciales proporcionadas por el cliente. Si las credenciales son válidas, se genera un token.

  3. Generación y firma de Token : el servidor de autenticación genera un Token y utiliza una clave para firmar el Token para garantizar la integridad y autenticidad del Token.

  4. Token devuelto al cliente : El servidor de autenticación devuelve el Token generado como respuesta al cliente.

  5. Token de almacenamiento del cliente : Después de recibir el Token, el cliente almacena el Token en una ubicación segura, generalmente almacenamiento local (como LocalStorage, SessionStorage) o una cookie segura.

  6. El cliente envía una solicitud y lleva el Token : el cliente lleva el Token como credencial de autenticación al servidor en solicitudes posteriores. Por lo general, el Token se colocará en el campo Autorización del encabezado de la solicitud, usando el modo Portador (por ejemplo: Autorización: Portador).

  7. Token de verificación del servidor : después de recibir la solicitud, el servidor extrae el Token de la solicitud y verifica la validez y la firma del Token. La verificación puede implicar los siguientes pasos:

    • Verificar la firma del Token: El servidor usa la clave compartida para verificar la firma del Token para garantizar la autenticidad e integridad del Token.
    • Verificar el período de validez del Token: El servidor verifica el tiempo de caducidad del Token para asegurarse de que el Token no haya caducado.
  8. Autorización de acceso y solicitud de procesamiento : si la verificación del Token es exitosa, el servidor autoriza al usuario a acceder al recurso solicitado o realizar la operación solicitada de acuerdo con la información de identidad del usuario y los derechos de acceso contenidos en el Token.

  9. Devolución de respuesta : el servidor devuelve una respuesta al cliente, que contiene el recurso solicitado o el resultado de la operación.

Este es un proceso de autenticación de token de uso común, pero la implementación específica puede variar según el marco de autenticación o el protocolo utilizado, como OAuth 2.0, JSON Web Token (JWT), etc. (lo explicaremos en el siguiente artículo). En las aplicaciones prácticas, también se deben considerar medidas de seguridad, como la transmisión segura de Token, el cifrado de información confidencial, etc.

4. Demostración de código

import java.util.HashMap;
import java.util.Map;

public class TokenAuthenticationExample {
    
    
    // 存储有效的 Token 和对应的用户信息
    private static Map<String, String> tokenMap = new HashMap<>();

    // 模拟用户登录,生成 Token 并返回
    public static String login(String username, String password) {
    
    
        // 假设用户名密码验证通过
        String token = generateToken();
        tokenMap.put(token, username);
        return token;
    }

    // 模拟请求验证 Token
    public static boolean isTokenValid(String token) {
    
    
        return tokenMap.containsKey(token);
    }

    // 模拟用户注销,删除对应的 Token
    public static void logout(String token) {
    
    
        tokenMap.remove(token);
    }

    // 生成随机 Token
    private static String generateToken() {
    
    
        // 在实际应用中,可以使用更加复杂的逻辑生成 Token,例如使用 UUID
        return "randomToken";
    }

    public static void main(String[] args) {
    
    
        // 模拟用户登录,生成 Token
        String token = login("username", "password");
        System.out.println("Token: " + token);

        // 模拟用户发送请求,将 Token 作为请求参数或请求头部
        boolean isValid = isTokenValid(token);
        System.out.println("Token is valid: " + isValid);

        // 模拟用户注销,删除 Token
        logout(token);

        // 再次验证 Token
        isValid = isTokenValid(token);
        System.out.println("Token is valid: " + isValid);
    }
}

En el código de muestra anterior, la clase TokenAuthenticationExample simula el proceso de inicio de sesión del usuario, solicitud de token de autenticación y cierre de sesión del usuario. tokenMap se utiliza para almacenar un token válido y la información de usuario correspondiente. El método de inicio de sesión simula el inicio de sesión del usuario, genera un token aleatorio, lo asocia con el nombre de usuario y lo almacena en tokenMap. El método isTokenValid se utiliza para verificar la validez del Token, es decir, para verificar si el Token especificado está incluido en el tokenMap. El método de cierre de sesión se utiliza para simular el cierre de sesión del usuario y eliminar el token especificado de tokenMap.

En el método principal del ejemplo, primero se simula que el usuario inicie sesión, se genera un token y se emite el token. Luego, simule al usuario para enviar una solicitud, pase el token como parámetro de solicitud o encabezado de solicitud al servidor y verifique la validez del token llamando al método isTokenValid. Luego, simule que el usuario cierre la sesión, elimine el Token y verifique la validez del Token nuevamente.

5. Ventajas de la autenticación de token

En comparación con la autenticación de sesión, la autenticación de token tiene las siguientes ventajas:

  1. Sin estado: la autenticación de token no tiene estado y el servidor no necesita almacenar datos de sesión ni mantener el estado de la sesión en el lado del servidor. Cada solicitud es independiente y el servidor solo necesita verificar y analizar el token para completar la autenticación. Esto elimina la necesidad de almacenar y administrar datos de sesión en el lado del servidor, lo que facilita que los servidores equilibren la carga y escalen horizontalmente.

  2. Escalabilidad: dado que la autenticación de token no depende de los datos de la sesión del lado del servidor, tiene una buena escalabilidad. Los tokens se pueden compartir y verificar entre varios servidores sin compartir los datos de la sesión. Esto permite que las aplicaciones manejen una gran cantidad de solicitudes simultáneas y admite alta disponibilidad y escalado horizontal.

  3. Soporte multiplataforma: la autenticación de token se puede usar en diferentes plataformas y pilas de tecnología, como aplicaciones web, aplicaciones móviles, servicios API, etc. Ya sea que se trate de comunicación entre diferentes clientes de la misma aplicación o entre diferentes aplicaciones, la autenticación de token se puede utilizar para implementar la autenticación y la autorización.

  4. Seguridad: la autenticación de Token puede usar un algoritmo de cifrado para firmar Token para garantizar la autenticidad e integridad de Token. Después de recibir el Token, el servidor verificará su firma y el período de validez para asegurarse de que el Token no haya sido manipulado y esté dentro del período de validez. Además, el Token generalmente se transmite a través de un protocolo de transmisión seguro (como HTTPS) para garantizar la seguridad durante la transmisión de la red.

  5. Desacoplamiento de front-end y back-end: la autenticación de token desacopla front-end y back-end, el front-end se puede desarrollar independientemente del back-end y la verificación de identidad se puede realizar mediante el envío de Token. De esta manera, se puede realizar la separación y el desarrollo paralelo de los extremos delantero y trasero, y se puede mejorar la eficiencia de colaboración del equipo.

  6. Escalabilidad y flexibilidad: la autenticación de token puede manejar de manera flexible diferentes tipos de requisitos de autenticación y autorización. Puede personalizar el contenido de Token, incluida la información adicional del usuario o la información de permisos. Al mismo tiempo, se pueden utilizar diferentes algoritmos de verificación y generación de tokens para cumplir con requisitos de seguridad específicos.

En general, en comparación con la autenticación de sesión, la autenticación de token tiene las ventajas de ausencia de estado, escalabilidad, soporte multiplataforma, alta seguridad, desacoplamiento de front-end y back-end, etc., lo que lo convierte en uno de los mecanismos de autenticación y autorización más utilizados. en aplicaciones modernas.

Supongo que te gusta

Origin blog.csdn.net/weixin_52533007/article/details/128442664
Recomendado
Clasificación