Los tokens de acceso OAuth2 no tienen que caducar (o más bien lo hacen, pero pueden pasar muchos años).
Un token de acceso se puede usar UNA VEZ para adquirir ciertos recursos del servidor de recursos, en particular, permite la adquisición de esos recursos aprobados por el usuario. Un token de actualización, por otro lado, permite un acceso repetido. Por lo tanto, no se pueden eliminar los tokens de actualización sin requerir la interacción del usuario entre cada acceso.
En general, a veces los tokens pueden ser robados por otras aplicaciones maliciosas en el mismo dispositivo o por ataques MITM en el teléfono. SSL es compatible con MITM si se puede hacer que el teléfono confíe en un certificado dudoso. Esto a veces es requerido por las compañías para acceder a las redes internas (requieren la aceptación de un certificado autofirmado, lo que les permite MITM todo el tráfico cifrado que ocurre en la red de la compañía.) Asumir el envío de los tokens cifrado significa que no pueden ser robados en el camino peligroso
Los tokens de portador no son más débiles que cualquier otra forma de token per se, como se demuestra en un montón de documentos (incluido uno mío, al que publicaré el enlace cuando lo pueda desenterrar). Sin embargo, los tokens de portador solo son apropiados en los casos en que los supuestos son válidos. La suposición de que el token puede mantenerse en secreto es una suposición principal de tokens de portador en general. Si esto no es cierto, los tokens de portador NO afirman NINGUNA propiedad de seguridad (aunque algunos aún se mantienen). Consulte NIST Level 3 tokens, que define qué ataques deben superar los tokens de portador, como s pecificado en OAuth Bearer Tokens. En resumen, los tokens de portador no deben derrotar el robo del token.
Los tokens de portador no se pueden revocar, es cierto. Sin embargo, dado que el patrón de acceso habitual es utilizar el token de acceso inmediatamente después de la adquisición, uno debe expirar los tokens de acceso con bastante rapidez para evitar posibles abusos, incluso si no se puede pensar en un caso de abuso actualmente. Mientras más tiempo tenga una ficha, más probabilidades habrá de que sea robada. De hecho, es mucho más peligroso robar un token de actualización, ya que proporciona acceso de repetición en un marco de tiempo más largo, si no puede proteger el ID del cliente. OAuth2 puede proporcionar acceso a los recursos en general y, por lo tanto, podría usarse para exponer las API a un cliente por un tiempo. Con un token de actualización se puede hacer mucho más daño, a diferencia de un token de uso único.
La autenticación del cliente de hecho puede hacerse más segura de varias maneras, por ejemplo, dando a cada cliente la descarga de una clave diferente. Esto evita ataques generalizados donde la ingeniería inversa de un token en un dispositivo rompe la seguridad para todas las instancias del cliente. Otras técnicas potenciales incluyen el uso de OAuth para verificar el cliente con su servidor, que luego realiza una segunda ejecución del protocolo OAuth con el servidor de autorización al que desea acceder. Esto le permite tener clientes que actualicen sus claves con regularidad, y para que todos ellos tengan claves diferentes, mientras que no colocan una carga excesiva en los sistemas utilizados por el servidor de Autorización propiedad de Facebook o Google, por ejemplo.
Al usar una aplicación móvil, los tokens de actualización de larga duración son más seguros que tener algún tipo de token de portador multiuso, incluso si no se toman medidas para proteger al cliente. Esto se debe a que el usuario no puede caducar el token. Si el token de actualización no es robado y el usuario simplemente desea revocar el acceso, puede hacerlo. Un token de portador de usos múltiples no puede revocarse incluso si el usuario simplemente desea revocar el acceso. Un token de referencia de base de datos de usos múltiples puede ser revocado obviamente, pero esto no es para lo que está diseñado el protocolo y, por lo tanto, los análisis de seguridad que se han realizado en OAuth no dicen nada sobre la seguridad de este sistema híbrido.
En conclusión, recomendaría utilizar tokens de actualización y tokens de base de datos, ya que es más probable que sea seguro. Si puede hacer algo para garantizar que el cliente sea una bonificación, las situaciones a las que protege son mínimas. Si desea asegurarse de que el cliente considere tokens suaves, a la google authenticator, ya que esta es una implementación sólida que ha resistido el análisis de algunas personas muy inteligentes.
"Al emitir los tokens, Google puede decidir si la aplicación fue autorizada por el desarrollador para solicitar tokens a su nombre". ¿Cómo lo hacen? ¿El sistema operativo Android se encuentra de alguna manera entre la aplicación y la red, lo que significa que la aplicación está firmada correctamente? – Thilo
En Android puede usar la clase ['AccountManager'] (https://developer.android.com/reference/android/accounts/AccountManager.html) para manipular tokens y autorizaciones, el servicio para Google ya está integrado allí. No creo que ya estén usando la comprobación de firma de la aplicación, sino un enfoque de credenciales del cliente. La verificación de la firma se anunció en una [Google I/O 2012 habla por Yaniv Inbar] (http://www.youtube.com/watch?v=dylFNrvZ_3U), la parte interesante es a las [10:41] (http://www.youtube.com/watch?v=dylFNrvZ_3U&hd=1&t=10m41s). –
El proyecto se llama [Servicios de Google Play] (https://developers.google.com/android/google-play-services/). –