Peter: When you use certain mobile apps (take Evernote for example), you don't get redirected to the website to grant permission to the app. Instead, you just log in with your username and password, straight inside the app.
In realtà Evernote utilizza OAuth . OAuth2 consente diversi flussi di lavoro di autenticazione. La concessione delle credenziali della password del proprietario della risorsa non apre un sito web.
Peter: So, I'm wondering how this works, and where to look to implement this. Is the password stored on the device, and sent to the website?
Un Android Authenticator è in grado di memorizzare un token di autenticazione e una password sul dispositivo. L'Authenticator utilizzerà il token di autenticazione, se disponibile, per accedere alla propria applicazione Web. Se nessun token è disponibile, proverà a prenderne uno con la password, che verrà recuperato attraverso una finestra di dialogo di accesso. Pertanto è possibile evitare di memorizzare la password, ma non appena il token di autenticazione scade, verrà visualizzata la finestra di dialogo di accesso. Anche Google consiglia di evitare di chiedere password quando possibile:
In general, we recommend minimizing the frequency of asking for user credentials—to make phishing attacks more conspicuous, and less likely to be successful. Instead use an authorization token and refresh it.
Peter: Is this actually safe?
È possibile che le password siano archiviate in modo sicuro. In parole povere, Android funziona come un sistema Linux, in cui ogni app viene eseguita da un altro utente, in modo che le app non possano accedere l'una all'altra senza API pubbliche. Nota che un telefono Android rooted indebolisce quel meccanismo .
Se si desidera ignorare l'implementazione di OAuth, è possibile creare un servizio di accesso più semplice, che restituisce un token di autenticazione (ad esempio un ID di sessione), ma come sempre quando si implementa il proprio sistema di sicurezza, ci sono molte insidie. Pertanto ti consiglio di cercare un framework OAuth (ad esempio Apache Oltu ) e implementa un autenticatore Android nel modo standard.