2012-04-26 14 views
5

Estoy tratando de entender a Android AccountManager y OAuth. Lo que me gustaría hacer es que el teléfono no tenga acceso a la contraseña. (Eso es lo que sugiere Google: "Be Smart About Security!") Por lo tanto, comprobé la aplicación de ejemplo de Google SampleSyncAdapter y comencé a leer el código. Entonces veo que esto suceda en AuthenticatorActivity:SampleSyncAdapter almacenar contraseña texto sin formato?

private AccountManager mAccountManager; 
private String mPassword; 

/** 
* ... Sets the 
* AccountAuthenticatorResult which is sent back to the caller. We store the 
* authToken that's returned from the server as the 'password' for this 
* account - so we're never storing the user's actual password locally. 
* 
* @param result the confirmCredentials result. 
*/ 
public void handleLogin(View view) { 
    .... 
    mPassword = mPasswordEdit.getText().toString();  
    .... 
    Log.d(TAG, "mPassword set to Account:" + mAccountManager.getPassword(account)); 
} 

private void finishLogin(String authToken) { 
    .... 
    mAccountManager.addAccountExplicitly(account, mPassword, null);   
    .... 
} 

mensaje de este registro es "mPassword establece en cuenta: la prueba". Esto es de alguna manera comprensible cuando se lee el resto debido a esto

protected String doInBackground(Void... params) { 
    .... 
    return NetworkUtilities.authenticate(mUsername, mPassword);  
    .... 
} 

si la contraseña era una muestra que esto no iba a funcionar.

También podría esperar que el resto del código funcione de manera diferente en Authenticator en getAuthToken() Supongo que estoy completamente equivocado sobre algo, pero solo quiero usar AccountManager para almacenar el resultado de un "baile" de OAuth para que Puedo usar esta Cuenta para autenticar mi servicio JSON RESTful.

¿Alguien puede alumbrar esto?

Respuesta

0

De la documentación se puede leer lo siguiente:

Es importante entender que el administrador de cuentas no es un servicio de cifrado o un llavero. Almacena las credenciales de la cuenta tal como las pasa, en texto sin formato. En la mayoría de los dispositivos, esto no es una preocupación particular, ya que los almacena en una base de datos a la que solo se puede acceder desde la raíz. Pero en un dispositivo rooteado, las credenciales podrían ser leídas por cualquier persona con acceso adb al dispositivo.

Por lo tanto, según tengo entendido, aquí hay un problema de uso incorrecto de las palabras (contraseña y token). Supongo que el procedimiento es el siguiente:

  1. Solicite a un usuario que ingrese un nombre de usuario y contraseña.
  2. En su aplicación de alguna manera envía este nombre de usuario y contraseña a su servidor.
  3. Según esta información, su servidor genera un token y lo envía de vuelta a su aplicación.
  4. AccountManager almacena este token en texto plano y luego este token se usa para autenticar a su usuario.
+0

¿Qué sucede si el token invalida después de un cierto período de tiempo? Supongo que solo tiene que volver a solicitar al usuario su contraseña en ese caso. Pero muchos servicios (p. Ej., Facebook) nunca me piden una contraseña, así que 1) el token que generan nunca expira, por lo que es básicamente tan bueno como una contraseña en términos de seguridad, o 2) están almacenando mi contraseña (texto sin formato) o encriptado). –

Cuestiones relacionadas