Estoy estudiando JSON Web Tokens, y quiero intentar crear mi propio servidor de autenticación (no te preocupes, esto no se ejecutará en producción en ninguna parte). Mi entendimiento hasta ahora es el siguiente: creas una cadena JSON que contiene todos los datos que deseas, y creas un hash basado en estos datos usando un secreto, que también incluyes en el JWT. El secreto se comparte entre el servidor de autenticación y el servidor de aplicaciones. El servidor de aplicaciones al que envía sus solicitudes usa el mismo secreto para volver a calcular el hash y lo compara con el de JWT.
Ahora, si por alguna razón su servidor de aplicaciones se ve comprometido y el secreto sale a la luz, no tiene suerte. Y es posible que no desee que sus usuarios analicen sus JWT. Así que se me ocurrió esta idea:
Hacer que el servidor de autenticación encripte el JWT con una clave privada, y luego que el servidor de la aplicación lo descifre con la clave pública significa dos cosas: los clientes no pueden inspeccionar el contenido de sus JWT, y un servidor de aplicaciones comprimido significa que aún no se pueden crear archivos JWT falsos, ya que la clave privada aún no está comprometida. Descifrar con la clave pública también significa que sabe que el JWT es del servidor de autenticación. Por lo que puedo decir, el cifrado con la clave privada y el descifrado con la clave pública, si bien son inusuales, no deberían llevar a un cifrado más débil.
Mi pregunta: ¿hay algún error en mi forma de pensar que podría hacer que este tipo de sistema de autenticación no funcione o sea fácil de transigir?