Estoy usando tokens JWT en encabezados HTTP para autenticar solicitudes a un servidor de recursos. El servidor de recursos y el servidor de autenticación son dos roles de trabajo separados en Azure.
No puedo decidir si debo almacenar los reclamos en el token o adjuntarlos a la solicitud / respuesta de alguna otra manera. La lista de Reclamaciones afecta la representación de elementos de la IU del lado del cliente, así como el acceso a los datos en el servidor. Por este motivo, quiero asegurarme de que los reclamos recibidos por el servidor sean auténticos y validados antes de que se procese la solicitud.
Ejemplos de reclamos son: CanEditProductList, CanEditShopDescription, CanReadUserDetails.
Las razones por las que quiero usar el token JWT para ellos son:
- Mejor protección contra la edición de reclamos del lado del cliente (es decir, piratear la lista de reclamos).
- No es necesario buscar los reclamos en cada solicitud.
Las razones por las que no quiero usar el token JWT:
- El servidor de autenticación debe conocer la lista de notificaciones centrada en la aplicación.
- El token se convierte en un único punto de entrada de hack.
- He leído algunas cosas que dicen que los tokens JWT no están destinados a datos de nivel de aplicación.
Me parece que ambos tienen inconvenientes, pero me estoy inclinando hacia la inclusión de estas afirmaciones en el token y solo quiero ejecutar esto por personas que han tratado con esto antes.
NOTA: Usaré HTTPS para todas las solicitudes de API, por lo que me parece que el token será seguro 'suficiente'. Estoy usando AngularJS, C #, Web API 2 y MVC5.
fuente
Respuestas:
Solo almaceno los reclamos de identificador (ID de usuario, etc.) (encriptados) en mi jwt.
Luego, cuando obtengo el token en el servidor (API), puedo hacer una búsqueda en el lado del servidor (db o llamada a la API de la red local) y recuperar todas las asociaciones al ID de usuario (aplicaciones, roles, etc.)
Sin embargo, si desea agregar más información al jwt, solo tenga cuidado con el tamaño, ya que es probable que se envíe en cada solicitud, pero asegúrese de cifrar los datos confidenciales de las reclamaciones.
fuente
Parece que la autenticación (quién es el usuario) y la autorización (lo que el usuario puede hacer) no están tan claramente divididas como usted quisiera.
Si no desea que el servidor de autenticación sepa a qué tiene derecho el usuario, limite las reclamaciones en ese JWT al ID de usuario tal como lo sugirió wchoward. Podría hacer que otro servidor conocido como el servidor de autorización busque lo que tiene derecho el usuario.
El servidor de recursos puede realizar el paso de autorización cuando el cliente le presenta por primera vez un token de autenticación. El servidor de recursos luego enviaría un token al cliente que contiene notificaciones de autorización.
Nota: Ambos JWT deben estar firmados por diferentes claves.
Pros:
Estafa:
fuente