Incluyendo un archivo OAuth client_secret en una aplicación Java

8

Se utiliza un archivo client_secret.json en el flujo de autorización OAuth 2.0 para la API de Google Drive ( ejemplo ).

Si incluyo client_secret.json en mi aplicación Java, acceder a los contenidos JAR es extremadamente fácil. Entonces, ¿debería preocuparme? No tengo forma de hacer este archivo "secreto".

¿Qué error se puede hacer con esta información? Un usuario final debe otorgar acceso a mi aplicación para acceder a sus archivos de Google Drive.

Actualización: Parece que se pueden analizar dos casos.

  • ¿Qué se puede hacer solo con client_secret.json ?

Esta fue la intención de mi primera pregunta. Lo único en lo que puedo pensar es que si un usuario vincula su cuenta a mi aplicación puede agotar mi cuota de Free para la API de Drive (1,000,000,000 de solicitudes por día).

  • Alguien accede a las credenciales almacenadas para un usuario (archivo StoredCredential , en el ejemplo) más client_secret.json .

Supongo que este es el peor de los casos, ya que "alguien" puede actuar como mi aplicación en la cuenta de usuario.

Actualización 2: Google docs se puede encontrar aquí: Uso de OAuth 2.0 para aplicaciones instaladas

  

El ID de cliente y el secreto de cliente obtenidos de la Consola de Desarrolladores están integrados en el código fuente de su aplicación. En este contexto, el secreto del cliente obviamente no se trata como un secreto .

    
pregunta IvanRF 05.11.2015 - 17:54
fuente

1 respuesta

3

No debes incluir el secreto del cliente en una aplicación javascript / desktop / mobile

La razón es, como dijiste, es muy fácil de acceder. No puedes protegerlo si lo incrustaste en tu aplicación. Una vez que un atacante encuentra el secreto de su cliente, ahora puede hacerse pasar por su cliente. El secreto del cliente solo debe incluirse en los servidores web.

Utilice OAuth2 Flujo implícito

OAuth2 Implicit Flow fue diseñado especialmente para resolver ese problema. En el flujo implícito, no hay secreto de cliente y una vez que un usuario se autentica con el proveedor OAuth2, el cliente recibirá el token de acceso directamente, por lo tanto, no es necesario un secreto de cliente.

enlace

No utilice Flujo implícito para la autenticación

OAuth2 se creó para la autorización, que no es lo mismo que la autenticación. Si necesita autenticación, deberá consultar Open ID Connect, que se basa en OAuth2 para proporcionar todas las partes faltantes necesarias para la autenticación segura.

Acerca de la seguridad

Si bien se recomienda usar el Flujo implícito cuando se usa un cliente de javascript / desktop / mobile, es principalmente para reducir el número de rondas de viaje requeridas. Dado que no puede proteger el secreto del cliente, no hay razón para incluirlo.

La única desventaja de eliminar el secreto del cliente (y el paso adicional vinculado a él) es que el cliente ya no puede saber si el token se le emitió ya que los tokens no están vinculados a un cliente específico. Esto conduce a múltiples oportunidades para ataques de phishing como se describe aquí:

enlace

    
respondido por el Gudradain 05.11.2015 - 19:38
fuente

Lea otras preguntas en las etiquetas