¿Por qué quien verifica un JWT debe indicar explícitamente los algoritmos permitidos?
Opciones
- Por rendimiento, para que la verificación vaya más rápido
- Para bloquear
alg: noney los ataques de confusión de algoritmo (Opción correcta) - Porque los tokens caducan al cabo de un tiempo
- Los algoritmos son opcionales en JWT, así que no hace falta
Respuesta
Para bloquear ataques como alg: none o la confusión de algoritmo (RS256 frente a HS256 usando la clave pública como secreto HMAC)
Por qué
El header de un JWT dice qué algoritmo lo firmó, pero ese header viene del cliente, así que lo controla el atacante.
Con alg: none, una librería débil puede aceptar un token sin ninguna firma. Con la 'confusión de algoritmo', el atacante firma con HS256 usando tu clave PÚBLICA como secreto, y un verificador descuidado lo acepta.
Pasa siempre los algoritmos esperados: jwt.decode(token, key, algorithms=["RS256"]), y comprueba exp, aud e iss.
Recuerda
Fija los algoritmos JWT permitidos; nunca confíes en el header del token.