Integre auth2 con una aplicación móvil nativa (iOS / Android)

Necesito integrar OAuth2 en una aplicación nativa de iOS y Android. He estado investigando sobre OAuth2 y aplicaciones móviles y encontré esta documentación:API de Google: uso de OAuth 2.0 para aplicaciones instaladas

La documentación anterior básicamente detalla cómo consumir el punto final Goolge OAuth 2.0 en aplicaciones móviles.

Esto es lo que dice el documento:

Al registrar la aplicación, usted especifica que la aplicación es una aplicación instalada. Esto da como resultado un valor diferente para el parámetro redirect_uri.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.El código de autorización se puede devolver a su aplicación en la barra de título del navegador o a unahttp://localhost puerto en la cadena de consulta.

Digamos que el usuario tiene 2 aplicaciones instaladas en su teléfono inteligente.

App1: aplicación legítima que consume el punto final de Google OAuth2.0

App2 - aplicación maliciosa

Realmente, lo que no estoy seguro es si la técnica anterior para integrar / consumir el punto final OAuth2.0 en una aplicación móvil nativa es insegura o si me falta algo. Aquí están mis preguntas -

El redirect_uri puede ser unhttp://localhost URL y puede contener cualquier número de puerto. El número de puerto no forma parte de la configuración inicial de la API y, por lo tanto, puede ser cualquier número de puerto válido. Además, client_id (de todos modos no se supone que sea un secreto) y client_secret no son realmente secretos, ya que están incrustados en el código fuente de la aplicación móvil.

Usando las condiciones anteriores, no es la posibilidad siguiente:

El usuario lanza App2.App2 redirige al usuario al punto final de Google OAuth2.0. Sin embargo, en la solicitud, App2 incluye client_id para App1 e incluye el número de puerto local en el que está escuchando App2.Cuando el usuario es redirigido y se autentica en el punto final de Google OAuth2.0, Google le indicará que "App1 (aplicación legítima) está solicitando acceso a los datos / API de Google en nombre del usuario", lo que parece un ataque de phishing desde el el usuario puede hacer clic en Sí, pensando que es App1 la que está solicitando acceso.Google OAuth2.0 emitirá un código de autorización para que App2 y App2 puedan realizar la siguiente solicitud, incluyendo client_id y client_secret de App1, y obtener access_token y refresh_token y continuar accediendo a los datos de usuario de Google.El redirect_uri también podría ser una - urn: ietf: wg: oauth: 2.0: oob que significa -

Este valor indica al servidor de autorización de Google que el código de autorización debe devolverse en la barra de título del navegador. Esto es útil cuando el cliente no puede escuchar en un puerto HTTP sin una configuración de cliente significativa. Las aplicaciones de Windows poseen esta característica.

Cuando se usa este valor, su aplicación puede detectar que la página se ha cargado y el título de la página HTML contiene el código de autorización. Luego, depende de su aplicación cerrar la ventana del navegador si desea asegurarse de que el usuario nunca vea la página que contiene el código de autorización. El mecanismo para hacer esto varía de plataforma a plataforma.

Lo anterior significa que el código de autorización se devuelve en el título de la ventana del navegador.

Mi pregunta es: ¿puede la App2 también detectar que la página se ha cargado y capturar el código de autorización y luego usarlo (antes de la App1) junto con el client_id y el client_secret para obtener access_token y refresh_token. ¿La instancia del navegador es global y cualquier aplicación puede monitorearla y el escenario de ataque anterior es válido o la instancia del navegador es de alguna manera específica de la aplicación, de modo que solo la Aplicación 1 puede detectar / monitorear los cambios?

¿Mi entendimiento es correcto O me falta algo? ¿Me estoy perdiendo alguna mitigación que mitigue las amenazas anteriores? O ¿Son los riesgos anteriores válidos pero aceptados dado que estamos en una plataforma de SO móvil?

¿Cuál es la forma segura de usar OAuth2.0 en aplicaciones móviles? - ¿Mostrar el código de autorización en la página del navegador y hacer que el usuario lo ingrese manualmente dentro de la aplicación? Y, en ese caso, ¿es privada la instancia del navegador para que otra aplicación no pueda monitorearla y apoderarse del propio código de autorización antes de que el usuario lo escriba en la apicación legítima?

Cualquier ayuda es apreciada

Gracias y saludos,

Respuestas a la pregunta(2)

Su respuesta a la pregunta