studio programacion herramientas fundamentos con avanzado aplicaciones android webview google-oauth

programacion - manual de android en pdf



¿Cómo puede Google detectar una solicitud desde un WebView? (6)

Google anunció que "ya no permitirá solicitudes de OAuth a Google en los navegadores integrados conocidos como ''vistas web''" .

En Android, las solicitudes de WebViews obtienen un encabezado HTTP_X_REQUESTED_WITH que se establece en el nombre del paquete de la aplicación. Aunque esto puede anularse, por lo tanto, sería posible ocultar al servidor que estamos realizando una solicitud utilizando un WebView. No conozco ninguna otra forma predeterminada de hacer esto.

¿Hay alguna forma de detectar, del lado del servidor, y no importa lo que haga el cliente, que una solicitud es de un WebView de Android? ¿Cómo se hace esto por Google?


Como han dicho otros, hay un rango de Diferencias entre la WebView y un navegador normal, pero todas se encuentran en los datos enviados en los encabezados desde el navegador para que pueda circunnavegarlos.

sin embargo, hay un libaray https://github.com/Valve/fingerprintjs2 así que puedes leerlo para ver los detalles de lo que hacen. ya que crea una huella dactilar del dispositivo, por lo que Google podría utilizar tachuelas como esta para la detección

También es posible que tengan su propio Javascript ejecutándose dentro del código central de WebView que no se puede eliminar y podrían detectarlo a partir de eso. por lo tanto, a menos que ajuste su propio navegador como una vista, no podrá circunnavegar la detección.

También es posible, como el método anterior, que puedan usar el sistema chrome: // en un iframe oculto y detectar su contenido para identificar EG chrome: // about-view / e imprimir el User-Agent codificado. De nuevo, la única forma de circunnavegar esto sería rodar su propio navegador.

Como @WilliamDenniss ha dicho, si detectan que podrían bloquear su aplicación y su cuenta y, por lo tanto, todas las aplicaciones en su cuenta, le impiden volver a publicar una aplicación desde esa cuenta.


Google está detectando el agente de usuario, supongo que no hay una verificación profunda, porque si cambia la cadena del agente de usuario (como el modo de escritorio en los navegadores), la autenticación funcionará.

Pero aquí hay una cita de google ( https://developers.google.com/terms/api-services-user-data-policy ),

No engañe a Google sobre el entorno operativo de una aplicación. Debe representar con precisión el entorno en el que aparece la página de autenticación. Por ejemplo, no pretenda ser una aplicación de Android en el encabezado del agente de usuario si su aplicación se está ejecutando en iOS, o represente que la página de autenticación de su aplicación se representa en un navegador de escritorio si, en cambio, la página de autenticación se muestra en una vista web integrada .

Lo más interesante es que algunos navegadores populares basados ​​en webview ( Dolphin , Firefox Lite , etc.) utilizan cadenas de agente de usuario modificadas. No más error ''no permitido_usuario_agente''. Están en PlayStore durante mucho tiempo. @William Denniss es cierto, pero estas aplicaciones no están suspendidas. Así que supongo, hay una manera de hacerlo sin violar las políticas de Google. Pero necesita un James Bond para encontrarlo, lol ...


No creo que Google esté planeando imponer ningún tipo de detección violenta de WebViews, creo que el cambio de política está destinado a comenzar una nueva norma. Google no tiene que hacerlo cumplir, si se convierte en la norma, los usuarios encontrarán dudoso que una aplicación proponga el inicio de sesión a través de un navegador integrado, y los usuarios deberán cumplir con la ley. (No estoy diciendo que todos los usuarios de una aplicación tengan que hacer tales solicitudes, pero apuesto a que sí, para cualquier aplicación que importe al menos una vocal).


No respondo a su pregunta directamente (lo siento), pero con respecto a la desaprobación de WebView para OAuth a la que hizo referencia: incluso si encuentra una manera de evitar que se detecte WebView durante un flujo de OAuth, hacerlo puede ser contrario a los Servicios API de Google: Datos del usuario Política , en particular la sección "No engañar a Google sobre el entorno operativo de una aplicación". Así que no lo recomendaría.

Por lo general, el uso de Pestañas personalizadas para OAuth (como a través de AppAuth para Android ) da como resultado una mejor experiencia para el usuario, ya que es probable que el usuario ya haya iniciado sesión en Google, lo que le permite revisar su solicitud sin necesidad de volver a iniciar sesión. También es más una experiencia más segura. Ese es el objetivo de la migración: una experiencia OAuth más segura y utilizable para usuarios finales :-)


Puede diferenciarse a través de la cadena de agente de usuario. Ver https://mobiforge.com/research-analysis/webviews-and-user-agent-strings

por ejemplo, el navegador Chrome predeterminado contiene el siguiente "(KHTML, como Gecko) Chrome / xx.xx ..." pero las vistas web predeterminadas tienen el siguiente patrón "(KHTML, como Gecko) Versión / 4.0 Chrome / xx.xx .." It Parece que webview tiene una cadena de versión extra.


Todas las solicitudes http enviadas a través de una vista web tienen un encabezado X-Requested-With que se puede usar para detectar que la solicitud proviene de webview.

X-Requested-With: the.app.packageName