tutorial funciona como security oauth-2.0 access-token

security - funciona - oauth2 token



¿Los tokens de acceso OAuth2 para una aplicación móvil tienen que caducar? (3)

La respuesta aceptada aquí es por qué caducan los tokens de acceso OAuth2 :

  • Muchos proveedores admiten tokens de portador que son muy débiles en cuanto a seguridad. Al hacer que sean de corta duración y que requieran actualización, limitan el tiempo que un atacante puede abusar de un token robado. ( ¿Qué significa esto? ¿Me refiero a permitir la transmisión sin TLS? ¿Algo más? ).
  • La implementación a gran escala no desea realizar una búsqueda en la base de datos en cada llamada a la API, por lo que, en lugar de eso, emiten un token de acceso autocodificado que puede verificarse mediante descifrado. Sin embargo, esto también significa que no hay forma de revocar estos tokens, por lo que se emiten por poco tiempo y se deben actualizar.
  • El token de actualización requiere la autenticación del cliente, lo que la hace más fuerte. A diferencia de los tokens de acceso anteriores, generalmente se implementa con una búsqueda de base de datos.

Suponiendo que no admitimos la transmisión no encriptada del token de acceso, nos ocupamos del primer punto.

Suponiendo que estamos bien con hacer una búsqueda en la base de datos contra un token de acceso completamente aleatorio y revocable, se encarga de la segunda.

Para las aplicaciones móviles, la autenticación del cliente no puede ser más fuerte porque "el client_id y el client_secret obtenidos durante el registro están incrustados en el código fuente de su aplicación. En este contexto, el client_secret obviamente no se trata como un secreto". ( Google ). Eso elimina la tercera preocupación.

Entonces, ¿cuál es el beneficio de separar tokens de acceso de corta duración y tokens de actualización de larga duración en este escenario? ¿Está "bien" simplemente emitir tokens de acceso que no caducan e ignorar toda la parte del token de actualización?


El mayor problema con un token de acceso que no caduca es que no hay ningún mecanismo para reemplazar un token que es robado. Si obtengo acceso a su token de acceso que no expira, entonces usted es efectivamente usted para ese sistema. Si el token es de corta duración y caduca, entonces hay un mecanismo para reemplazar el token robado y un límite en la ventana Tengo que romper tu token.

Supongamos que me lleva 3 horas descifrar un paquete y obtener el token, pero el token de acceso solo es válido por dos horas. Entonces, cuando no pueda acceder a su cuenta, el token ha cambiado y tengo que volver a empezar. Si el token no caduca, entonces tengo acceso completo a su cuenta y usted no tiene forma de reemplazarlo, aparte de quitar el token y forzar una nueva autorización.


La diferencia entre un token de actualización y un token de acceso que no caduca en los medios de seguridad es una llamada adicional al servidor de autorización.

Si un atacante obtiene acceso a su token de acceso que no caduca , puede llamar directamente a su servidor de recursos y obtener datos confidenciales como respuesta.
Ahora, si él roba su token de actualización , primero tiene que llamar al servidor de autorización y recibir un token de acceso en respuesta. Luego puede consultar el servidor de recursos para datos confidenciales.

Cada vez que se solicita un token de acceso a su servidor de autorización mediante un token de actualización, la especificación de OAuth 2 (al menos el último borrador por ahora) requiere que el servidor verifique la identidad del cliente y, si es posible, está vinculado al token .

Como el enfoque normal con un secreto de cliente no funciona para identificar definitivamente una aplicación instalada en una plataforma abierta, la plataforma que ejecuta la aplicación debe proporcionar métodos para hacerlo. Google, por ejemplo, requiere que las aplicaciones de Android estén firmadas por el desarrollador. Al solicitar credenciales para una aplicación de Android que utiliza la Consola de API de Google , por lo tanto, debe especificar la huella digital del certificado que utilizó para firmar la aplicación y solo obtener una ID de cliente, pero no un secreto como respuesta. Al emitir tokens, Google puede decidir si la aplicación fue autorizada por el desarrollador para solicitar tokens en su nombre.

Si definitivamente no puede verificar la identidad del cliente, es al menos posible en algunos casos reconocer que un token de actualización fue robado. La especificación tiene un ejemplo para esto :

Cuando la autenticación del cliente no es posible, el servidor de autorización DEBERÍA implementar otros medios para detectar el abuso de token de actualización.

Por ejemplo, el servidor de autorización podría emplear la rotación de token de actualización en la que se emite un nuevo token de actualización con cada respuesta de actualización de token de acceso. El token de actualización anterior se invalida pero es retenido por el servidor de autorización. Si el atacante y el cliente legítimo ponen en peligro un token de actualización, uno de ellos presentará un token de actualización invalidado, que informará al servidor de autorización de la infracción.


Los tokens de acceso OAuth2 no tienen que caducar (o sí lo hacen, pero pueden pasar muchos años).

Un token de acceso se puede utilizar UNA VEZ para adquirir ciertos recursos del servidor de recursos, en particular, permite la adquisición de aquellos recursos aprobados por el usuario. Un token de actualización por otro lado permite el acceso repetido. Por lo tanto, no se puede eliminar los tokens de actualización sin requerir la interacción del usuario entre cada acceso.

En general, sin embargo, los tokens a veces pueden ser robados por otras aplicaciones malintencionadas 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 poco fiable. A veces, las empresas requieren que estos accedan a las redes internas (requieren la aceptación de un certificado autofirmado, que les permite MITM todo el tráfico cifrado que se produce a través de la red de la empresa. Por lo tanto, suponer que enviar los tokens cifrados significa que no pueden ser robados en ruta) peligroso.

Los tokens del portador no son más débiles que cualquier otra forma de token, como se demuestra en un montón de papeles (incluido uno de los míos, a los que enviaré el enlace cuando pueda extraerlo). Sin embargo, los tokens del portador son solo apropiado en los casos en que los supuestos que hacen son válidos. La suposición de que el token se puede mantener en secreto es un supuesto primario de los tokens de portador en general. Si esto no es cierto, entonces los tokens del portador NO imponen NINGUNA propiedad de seguridad (aunque algunos todavía se mantienen). Consulte los tokens de nivel 3 de NIST , que definen qué tokens de portador de ataques deben ser derrotados, como se especifica en los tokens de portador OAuth . En resumen, las fichas de portador no deben vencer el robo de la ficha.

Las fichas de portador no pueden ser revocadas, 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, se deben vencer los tokens de acceso con bastante rapidez para evitar posibles abusos, incluso si no se puede idear un caso de abuso actualmente. Cuanto más tiempo esté alrededor de una ficha, más probabilidades hay de que la roben. Un token de actualización es, de hecho, mucho más peligroso de ser robado, ya que brinda acceso repetido durante un período de tiempo más prolongado, si no puede asegurar la identificación del cliente. OAuth2 puede proporcionar acceso a los recursos en general, y por lo tanto, por ejemplo, podría usarse para exponer las API a un cliente por un tiempo. Con un token de actualización se puede hacer un daño significativamente mayor, en lugar de un token de un solo uso.

De hecho, la autenticación del cliente se puede hacer más segura de varias maneras, por ejemplo, dando a cada cliente en la descarga una clave diferente. Esto evita ataques generalizados en los que la ingeniería inversa de un token en un dispositivo rompe la seguridad de todas las instancias del cliente. Otras posibles técnicas 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 actualizan sus claves con regularidad, y para que todos tengan claves diferentes, sin poner una carga excesiva en los sistemas utilizados por el servidor de Autorizaciones 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 soporte de uso múltiple, incluso si uno no toma 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, se puede hacer esto. Un token de portador de usos múltiples no se puede revocar incluso si el usuario simplemente desea revocar el acceso. Obviamente, se puede revocar un token de referencia de base de datos de uso múltiple, pero para esto no 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 usar tokens de actualización y tokens de base de datos, ya que es lo más probable que sea seguro. Si puede hacer cualquier cosa para asegurar al cliente, eso es una ventaja, pero las situaciones contra las que protege son mínimas. Si desea asegurar el cliente, considere tokens blandos, un autenticador de google, ya que esta es una implementación sólida que ha resistido el análisis por parte de personas muy inteligentes.