He estado pensando en probar JWT como una alternativa a la autenticación basada en sesiones antiguas por razones de rendimiento (es decir, no hay búsqueda SQL adicional para la identificación de la sesión en la base de datos solo para obtener la identificación del usuario para cada solicitud HTTP) y razones de usabilidad (JWT se usará en los encabezados HTTP en lugar de las cookies para que mi aplicación pueda usarse como API RESTFUL y sea accedida por clientes que no utilizan el navegador, como las aplicaciones móviles, además, agregar JWT en los encabezados HTTP elimina el peligro de CSRF). Dado que la carga útil se firma con un HMAC seguro como SHA256, es casi imposible falsificar la carga útil. Además, la identificación de usuario itslef no es realmente un secreto y la aplicación la utiliza públicamente.
Estoy pensando en usar una carga útil que es algo como esto:
{
id: "1234abcd",
iat: 1522779638
}
donde iat
es una marca de tiempo de Unix en la que se creó el JWT y esto se puede usar para caducar el mensaje JWT y también para reforzar la seguridad al aleatorizar el hash para la misma ID.
Mi pregunta es, asumiendo que voy a aplicar una conexión HTTPS estricta para mi aplicación en producción, está usando esta carga útil sin cifrar lo suficientemente segura como para verificar la identidad del usuario e iniciar métodos inseguros como los métodos POST (por ejemplo, seguir a un usuario, dejar de seguir a un usuario , etc ...) ¿es tan seguro como la autenticación basada en sesión? ¿Necesito cifrar la carga útil utilizando algo como AES-192 o AES-256 solo para estar más seguro?