Abbiamo avuto una requisiti simili sul ultimo progetto: GAE backend con GWT frontend e Android/client iPhone. Inoltre, non volevamo memorizzare le credenziali dell'utente.
Quindi abbiamo scelto di utilizzare OpenID, che purtroppo è uno standard Web e non funziona bene con i dispositivi mobili, ma è fattibile.
Sul lato GAE abbiamo semplicemente abilitato l'accesso federato che ci ha dato OpenID.
Sui dispositivi mobili, quando l'utente deve effettuare il login, presentiamo loro una lista di autenticatori OpenID (Google, Yahoo, ecc.). Quindi apriamo un browser nativo (non browser incorporato) e indirizziamo l'utente al sito di autenticazione OpenID scelto. Il vantaggio è che il browser dell'utente di solito ha già un nome utente/password, quindi questo passaggio richiede solo all'utente di premere un pulsante.
Questo è tutto piuttosto semplice. Ora ecco la parte difficile: Dopo che l'utente ha confermato l'accesso, OpenID reindirizza nuovamente al nostro URL di ritorno GAE (è necessario fornire questo URL quando viene effettuata una richiesta). Su questo URL creiamo un URL personalizzato, ad esempio:
yourappname://usrname#XXXYYYZZZ
dove XXXYYYZZZZ è auth token. Otteniamo questo token dalla pagina di ritorno in cui è memorizzato come cookie ACSID: abbiamo usato alcuni JSP per leggere questo cookie e inserirlo in un URL personalizzato superiore.
Poi registriamo le nostre applicazioni Android e iPhone per gestire i yourappname://
URL, in modo che quando l'utente cliskc questo link, la nostra applicazione viene richiamato e il collegamento è passato a esso. Estraiamo il nome utente e il token da questo link e lo usiamo nelle richieste REST al backend GAE.
Se avete altre domande avrei volentieri aggiornare questo post.
Aggiornamento:
Il cookie di sessione utente su AppEngine di produzione si chiama ACSID
, mentre sul server di sviluppo AppEngine è chiamato dev_appserver_login
.
+1 - molto dettagliato! Cosa mostra il testo dell'URL personalizzato? "Fare clic qui per tornare all'applicazione"? O qualcosa di simile? –
Può mostrare quello che ti piace. Ho usato il link "Continua .." che sembra un pulsante. Con qualche javascript potresti avviare l'app automaticamente, senza che l'utente debba fare clic sul link: non l'hai provato, avrebbe dovuto essere testato. –