Tengo el siguiente caso de uso:
- Quiero escribir una aplicación de escritorio que haga uso de una API de terceros (por ejemplo, Dropbox)
- Esta API requiere que se envíe un
access_token
al servidor con cada solicitud. - Este token se genera en nombre del usuario y mi aplicación mediante un flujo de autenticación
OAuth2
, que el usuario realiza en mi sitio web.
Ahora, normalmente pasaría el access_token
generado a la aplicación de escritorio, donde se puede usar para hacer llamadas a la API. Sin embargo, dado que el access_token
se almacena en la computadora del usuario, él podría extraerlo y usarlo mal para propósitos no previstos por la aplicación (por ejemplo, exceder el límite de la tasa API o realizar solicitudes maliciosas).
Para resolver esto, podría, por supuesto, canalizar todo el tráfico de la API a través de mi propio servidor backend y así evitar proporcionar al usuario el access_token
. Sin embargo, esto generaría un gran costo adicional y sería un riesgo de seguridad para el cliente, ya que sus datos pasarían por un servicio adicional de terceros antes de ir al servidor de API.
¿Hay alguna otra manera de evitar que el cliente pueda recuperar access_token
, mientras le permite usarlo para realizar solicitudes al servidor de API?
Leí sobre el paso de la conexión TCP, lo que me permitiría crear una conexión con el servidor API en mi backend usando el token de acceso y luego entregar esa conexión al cliente, pero esta técnica parece más bien experimental y probablemente no esté listo para la producción.
Otra forma sería usar criptografía asimétrica para encriptar de alguna manera el access_token
junto con la URL en el servidor backend y permitir que el cliente transfiera estos datos pre-encriptados al servidor API, pero nuevamente No tengo idea de cómo implementar esto utilizando SSL.
¿Alguna idea?
Editar:
He pensado en el problema y creo que tengo una solución, que requeriría un nuevo punto final de API y, por lo tanto, no resolvería el problema inicial: