2012-01-05 2 views
9

ho seguito il tutorial di Nick Johnson Authenticating against App Engine from AndroidAutenticazione contro App Engine da Android con Federated Accesso (OpenID)

Esiste un modo per ottenere lo stesso flusso di lavoro (senza accesso web) con Federated Accesso (anche se il supporto è limitato agli account Google)?

[Edit] Altre Informazioni

La configurazione attuale comprende:

  • App Engine di UserService configurato per l'accesso federato (openId..gmail, AOL, MySpace, ...?)
  • Facebook (OAuth)
  • Twitter (OAuth)

Tutti i tipi di autenticazione sono racchiusi in un UserService, quindi posso chiamare UserService.getCurrentUser() (simile a UserService di Appengine, ma supporta Twitter e Facebook).

Gli account possono avere più metodi di autenticazione collegati tra loro.

Finora i client sono tutti basati sul Web e le cose funzionano correttamente. : D

mi piacerebbe:

  1. Aggiungi un'API pubblica (per il web e applicazioni mobili native),
  2. utilizzare l'API internamente per applicazioni mobili native.

Quali sono le opzioni?

Stavo pensando di limitare l'autenticazione agli account Google per l'app per Android, nella speranza di evitare la schermata di accesso basata sul Web. Anche così sarebbe bello supportare Facebook e Twitter per il web Api.

risposta

4

No, OpenID è uno standard di autenticazione basato su browser: si basa sull'utente che viene indirizzato alla pagina di autenticazione esterna e quindi torna alla pagina dell'app.

È possibile farlo tramite WebView all'interno di Dialog per un'esperienza utente fluida. Vedere il progetto open source LeanEngine per un'implementazione di esempio: server e client. Il server è un po 'complicato in quanto supporta sia l'accesso a Facebook che OpenID. OpenID solo il login sarebbe più semplice. Fondamentalmente hai solo bisogno dell'esempio del cliente.

Tuttavia, se non hai bisogno di OpenID e sei disposto a limitare i tuoi utenti all'account Google, puoi utilizzare Google ClientLogin API. An example usage.

+0

Grazie per le informazioni! –

+0

Il passaggio all'opzione di autenticazione predefinita di App Engines (Google Accounts API) è l'unico modo per utilizzare ClientLogin? Se lo faccio potrei usare una libreria di terze parti per OpenId. –

+0

LeanEngine sembra utile ~ Usa il servizio utente di AppEngine? Può essere usato per un REST Api? –

3

Ho svolto ricerche su questo argomento per diverse settimane e alla fine ho visto la luce alla fine del tunnel. Spero che tu possa almeno ottenere alcuni suggerimenti dalla mia ricerca. In primo luogo, ho appena realizzato (http://softwareas.com/oauth-openid-your-beaching-up-the-wrong-tree-if-you-thyre-the-same-thing) che OpenID e OAuth non sono la stessa cosa, anche se potrebbero essere usati insieme. La mia app Google App Engine è configurata con l'API di Google Account e al momento ho solo un client Android. Sono un seguace religioso del famoso blog di Nick Johnson che hai menzionato sopra.Quindi, ho utilizzato l'istanza di AccountManager nel client Android per l'autenticazione senza interruzioni con la mia app App Engine, senza chiedere all'utente le credenziali e senza reindirizzare a un browser/webview, ecc.

Proprio come si desidera aprire un API pubblica alla tua app GAE, voglio anche espandere la mia base di clienti per avere altri client come client basati sul Web, API python, client iOS, ecc. e nessuno di questi ha questo pratico AccountManager. Quindi, OAuth è la scelta più ovvia. Ecco un articolo di Ikai Lan del team di Google App Engine che dimostra l'utilizzo di un client python utilizzando OAuth per l'autenticazione con un'app GAE: http://ikaisays.com/2011/05/26/setting-up-an-oauth-provider-on-google-app-engine/

La cosa divertente è che ho pensato che l'uso di Oauth sul client richiedesse la configurazione dell'app GAE con OpenID/accesso federato. Ma questo non è il caso. Quindi la soluzione per me, e probabilmente anche per te, è semplice: sul client Android, usa AccountManager per il blog di Nick. E su altri client, usa Oauth e reindirizza l'utente alla pagina di Google Account per abilitare l'autenticazione (vedi l'articolo di Ikai Lan di cui ho parlato nel paragrafo precedente).

La linea di fondo per te è, puoi evitare l'accesso basato sul web su un client Android, ma non da nessun'altra parte. Devi autenticare un utente almeno una volta, in qualche modo. Si spera che l'accesso basato su browser avvenga solo la prima volta e il browser memorizza nella cache le richieste future.

Buona fortuna!

+0

Ho un aggiornamento dopo aver implementato (quasi con successo) l'accesso Oauth dal mio client Android che comunica con la mia app python GAE. Ho usato google-java-client-api v1.6 sul client Android (come descritto qui: http://fabiouechi.blogspot.com/2011/11/using-google-oauth-java-client-to.html. Ma per inviare dati specifici delle app dal mio client Android, ho scoperto che non posso utilizzare i dati con codifica URL, quindi ho utilizzato application/json. Ulteriori dettagli nella mia domanda stackoverflow: http://stackoverflow.com/questions/ 8870670/using-google-api-java-client-su-android-a-post-richiesta-non-sembra-per-autenticare. – Shiprack

+0

l'unico problema è che GAE non è più GRATUITAMENTE la politica di google è simile a quella di uno spacciatore di cancelli di una scuola: prendi i bambini agganciati gratuitamente e poi inizia a caricarli. –

+4

Vedo lo spirito di quello che dici, ma GAE non è mai stato gratuito. ora si ricaricano in base alle ore di istanza (analogamente a quanto addebita Amazon S3). Quindi, se tu fossi un'applicazione ad uso intensivo della CPU, probabilmente vedresti che la tua carica non cambierà affatto. le plicazioni sono molto interessanti per l'I/O e avrebbero visto un aumento dei costi. Da quel punto di vista - sì, GAE ha avuto un approccio esca-e-interruttore. Ma tutti lo fanno, giusto? Celle cellulari, DSL, fornitori di cavi ... palestre (i primi 3 mesi sono gratis?) – Shiprack