Implementé mi propio esquema de autenticación y autorización de Json Web Tokens, que se basa en tres tokens: token de acceso, token de referencia y token de actualización. Son generados por el backend o el código de la aplicación y toda la lógica de autorización se implementa en middleware (en el código Lua incorporado en nginx).
Estas son algunas de las preguntas que me están molestando:
- ¿Debo firmar mi token de referencia con RSA antes de pasarlo al cliente?
- ¿Debo firmar mi token de actualización con RSA? Obviamente, al igual que el token de referencia, no almacena ninguna información crítica y, por lo tanto, no estoy seguro de eso.
- ¿Debo firmar mi token de acceso con RSA, si nunca se pasa al cliente y solo se usa en el lado del servidor? Supongo que debería, como en el caso de las contraseñas con hash almacenadas en la base de datos.
- ¿Cuáles son las convenciones de nomenclatura para el encabezado HTTP en las que paso mi token de referencia del servidor al cliente? ¿Está bien usar solo un encabezado arbitrario como
X-Reference-Token
? - ¿En qué encabezado debo pasar el token de referencia del cliente al servidor? Debería usar
Authorization: Bearer ...
(parece una convención estándar) o está bien usar el mismoX-Reference-Token: ...
- ¿Es seguro (supongo que no) pasar el token de actualización al cliente? Y si no, ¿cómo lo almacenan? El token de referencia se almacena en las cookies del lado del cliente y se pasa con cada solicitud del cliente al servidor, el token de acceso nunca se pasa al cliente y se almacena en la caché del lado del servidor y ¿dónde debo guardar mi token de actualización?
- ¿Es seguro usar el valor de token de referencia sin procesar como clave, por lo que obtengo el token de acceso desde la memoria caché del lado del servidor? Digamos que mi token de referencia es solo un GUID, ¿es lo suficientemente seguro como para usar este GUID como una clave por la cual se almacena mi token de acceso? ¿O es más seguro obtener esta clave de GUID mediante algunas transformaciones?