Estoy tratando de determinar si usar un Token provisto por un servicio de Terceros directamente, O emitir mi propio Token personalizado y almacenar el lado del servidor de Terceros de Token.
Flujo de autenticación
-
El usuario autentica su identidad a través de un tercero (inicio de sesión en redes sociales / gestión de identidad). Para ello, ingresan su nombre de usuario y contraseña en la página de inicio de sesión del tercero (expuesta como una vista web en la aplicación de cliente), y el tercero devuelve a la aplicación de cliente un "token de autorización".
-
El cliente envía el 'Token de autorización' a mi servidor, que en combinación con una 'Clave de aplicación secreta' (proporcionada por un tercero) permite al servidor intercambiar el 'Token de autorización' del usuario por un 'Token de acceso' (el token que realmente necesito para hacer llamadas a la API en nombre del usuario). Esto sucede en el lado del servidor y me permite mantener en secreto mi 'clave de aplicación secreta' y fuera del alcance del cliente.
-
En este punto, no estoy seguro de si ...
- Envíe el 'token de acceso' de terceros al cliente para que pueda incluirlo en todas las llamadas futuras al servidor que luego llamará a la API de terceros, O
- Envíe un token JWT personalizado al cliente, almacenando el 'token de acceso' del tercero en el servidor para cada usuario.
Tengo la intención de hacer todas las llamadas futuras al lado del servidor API de terceros, sin embargo, mis preocupaciones con cada opción son:
- Si el cliente tiene su token de acceso para el servicio de terceros, aunque solo permite el acceso a los datos a los que tiene acceso su cuenta, significa que podrían realizar llamadas API adicionales contra los límites de llamadas de mi aplicación.
- Si el servidor mantiene este token de acceso de terceros (nunca lo envía al cliente), crea un recurso que es confidencial y debe almacenarse y protegerse. Creo que sería más seguro tener solo acceso temporal al token de acceso cuando sea necesario.
¿Cuál es la forma preferida de manejar esto?