¿Qué significa el permiso "MANAGE_ACCOUNTS"?

18

De vez en cuando leo que MANAGE_ACCOUNTS Se necesita permiso (en realidad se llama "KONTEN HINZUFÜGEN ODER ENTFERNEN", ya que tengo un teléfono alemán. Supongo que el texto a continuación es algo así como "Agregar o eliminar cuentas, crear cuentas y establecer contraseñas, usar cuentas en el dispositivo "en inglés).

Estoy haciendo esta pregunta porque quería instalar la aplicación GitHub .

Creo que encontré una pregunta muy similar que me gustaría incluir aquí:

  1. ¿Qué significa que pueden crear cuentas?
  2. ¿Por qué Amazon (aplicación Kindle) / GitHub incluso necesitaría esto?
  3. ¿Hay algún riesgo?
Martin Thoma
fuente
También encontré una explicación de The Guardian, por qué solicitan algunos permisos: guardian.co.uk/mobile/insideguardian/android-app-permissions Pero me gustaría obtener una respuesta más detallada, especialmente cuando se trata de riesgos potenciales .
Martin Thoma el

Respuestas:

18

En resumen, GitHub está utilizando el administrador interno del sistema de cuentas para almacenar sus credenciales de GitHub. Esto funciona exactamente igual que agregar una cuenta de Google o una cuenta de Exchange. Esencialmente, está iniciando sesión con sus credenciales y se almacenan en el Administrador de cuentas, lo que le impide tener que volver a ingresar estas credenciales nuevamente en el futuro.

Esto es más útil cuando las credenciales se usan en varias aplicaciones, ya que solo tiene que iniciar sesión una vez. Por ejemplo, Google Chrome accederá a su cuenta a través del Administrador de cuentas en lugar de obligarlo a iniciar sesión nuevamente (el cuadro de diálogo amarillo que aparece en la parte inferior le pregunta si desea iniciar sesión con su Cuenta local en su teléfono cuando visita gmail u otro Sitio web de Google en el navegador Google Chrome de su teléfono).

¿Qué significa que pueden crear cuentas?

Pueden crear cuentas locales en su teléfono para su aplicación (y solo su aplicación). Aquí hay un ejemplo de una lista en mi teléfono:

Captura de pantalla
Captura de pantalla (haga clic en la imagen para ver una variante más grande)

¿Por qué Amazon (aplicación Kindle) / GitHub incluso necesitaría esto?

Simplifica las credenciales en Android. Es el método recomendado para hacer esto.

¿Hay algún riesgo?

No debería haberlo. Si una aplicación usa AccountManager y dice, quiere usar su cuenta de Google, entonces tendrá que pedirle permiso explícitamente ya que necesita un token de autenticación para usar esa cuenta. Ver más información en la documentación del SDK .

Bryan Denny
fuente
3
Cuando no hay riesgo, ¿por qué no todas las aplicaciones pueden usar el administrador de cuentas de forma predeterminada?
Martin Thoma
1
@ Moose esa es una buena pregunta. Como desarrollador de Android, no tengo experiencia en el uso del AccountManager, pero creo que la respuesta correcta es que técnicamente le permite intentar acceder a cualquiera de las cuentas que figuran en su teléfono (aunque aún debe pedir permiso para permitir el acceso a esa cuenta en el primer uso, que yo sepa)
Bryan Denny
1
Acabo de navegar por los documentos de la API. Básicamente, una aplicación enumeraría las cuentas existentes y puede filtrarlas por tipo, por ejemplo, "todas las cuentas de Google". Si falta una cuenta, crearía una. Estas acciones requieren permisos GET_ACCOUNTS y ​​MANAGE_ACCOUNTS. Sin embargo (!), Nada parece restringir que las aplicaciones usen cualquier cuenta que les guste, por ejemplo, hacerse pasar por una cuenta de Google en lugar de su cuenta de Github. Aparentemente, las aplicaciones pueden incluso obtener la contraseña de la cuenta, si se almacenó en el administrador de la cuenta. Si eso es cierto, existe un gran riesgo para esos permisos. Tienes que confiar completamente en el autor de la aplicación.
deepc
Espera un segundo, @BryanDenny: Dices que no debería haber riesgos. Pero, ¿el permiso para "agregar o eliminar cuentas" no implica que dicha aplicación podría, por ejemplo, eliminar cualquier cuenta establecida del dispositivo? ¿Qué impide que establezca una contraseña diferente en otra cuenta (que provoca, por ejemplo, un "bloqueo" por "demasiados intentos" más adelante)? Si bien veo los requisitos, extraño la capa de seguridad que se señala (p. Ej., El usuario debe confirmar dichos cambios de alguna manera, o ser capaz de restringirlos a una cuenta / tipo dado). ¿Hay tal cosa? Nunca noté ninguna "ventana emergente" relacionada o similar.
Izzy
8

Para administrar cuentas, Android usa varios permisos; algunos de ellos son fácilmente mal entendidos. Se puede encontrar una muy buena explicación sobre el uso de las cuentas, por ejemplo, en la respuesta de Dan a la pregunta ¿Qué puede hacer una aplicación con el permiso "USAR CUENTAS EN EL DISPOSITIVO"? . Permítanme tratar de resumir los permisos involucrados y lo que significan:

  • ACCOUNT_MANAGER : este permiso está reservado para las aplicaciones del sistema. Un administrador de cuentas es el servicio que trabaja detrás de escena y se encarga de que todo funcione como se espera.
  • AUTHENTICATE_ACCOUNTS : una aplicación que utiliza este permiso generalmente proporciona una interfaz para manejar un determinado tipo de cuenta (que no es conocido por el sistema Android preinstalado), como Dropbox. Tal como se envió, Android no sabe cómo iniciar sesión en Dropbox y cómo lidiar con una cuenta de Dropbox, por lo que la aplicación Dropbox proporciona el mecanismo. Además, un "autenticador de cuenta" podría restringir las acciones que una aplicación puede realizar con la cuenta (por lo que, por ejemplo, sería posible administrar esto a través de alguna interfaz web ofrecida por el servicio).
  • GET_ACCOUNTS : obtenga una lista de cuentas disponibles. De esta manera, una aplicación que quiere, por ejemplo, usar Dropbox para almacenamiento, puede verificar si hay una cuenta adecuada disponible. Debe verificar esto antes de usarlo.
  • MANAGE_ACCOUNTS : la documentación de la API no es tan clara acerca de este permiso. Pero según la respuesta de Bryans , una aplicación solo puede eliminar / modificar una cuenta que creó por sí misma. Por supuesto, puede crear cualquier cuenta nueva y administrarla.
  • USE_CREDENTIALS : esta aplicación puede usar las "credenciales" para iniciar sesión en una cuenta. En la mayoría de los casos, "credenciales" solo significa que el autenticador correspondiente crea un token apropiado y lo entrega (sin embargo, la forma de tratar eso se deja al autenticador). Al usar una cuenta por primera vez, el administrador de la cuenta debe asegurarse de que se le pregunte al usuario si lo permite. De nuevo, la respuesta de Dan explica bien esta parte.

Espero haber podido arrojar algo de luz. Esto era algo que también me ponía nervioso, así que tardé dos días en investigarlo. Si tengo algo mal, indíquelo en los comentarios para poder corregirlo.

Izzy
fuente