Evita que una aplicación cliente de escritorio abusen de un token de acceso API obtenido a través de OAuth2 en nombre de una aplicación

4

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:

enlace

    
pregunta ThePhysicist 16.02.2015 - 15:15
fuente

2 respuestas

2

Darle al cliente de escritorio las claves del reino es, por definición, una violación de CWE-602: cumplimiento del lado del cliente de la seguridad del lado del servidor . No se puede confiar en ningún software que se ejecute en la máquina de un atacante.

Debe existir una API intermedia, un servicio web que usted controla, y brinda la capacidad de imponer el control de acceso basado en el usuario a un recurso comunitario (archivos en DropBox).

También puede leer los Términos y condiciones de DropBox , que prohíben la reventa de su servicio.

    
respondido por el rook 16.02.2015 - 15:48
fuente
1

En su caso, realmente no se puede evitar el uso policial de la API. Dado que la API está asignada a (usted) el desarrollador, tendrá que alojar algún tipo de servidor para proporcionar control de acceso a la API de dropboxes. Lea los términos de servicio de Drop Boxe cuidadosamente.

    
respondido por el baordog 16.02.2015 - 15:59
fuente

Lea otras preguntas en las etiquetas