2013-08-05 11 views
9

Sto trasferendo un'app Web sul lato server a un'applicazione JavaScript a pagina singola utilizzando un'API RESTful. Attualmente. gli utenti possono autenticarsi tramite Facebook, Twitter, Google, ecc. o tramite e-mail e password. Come autorizzo le stesse forme di autenticazione su un'API RESTful? Immagino che assomigli a qualcosa del genere:Autenticazione degli utenti di un'API utilizzando un provider Oauth di terze parti

  1. Autentica con il provider sul lato client.
  2. Prendere qualcosa dalla risposta Oauth e passarla a un'API sul mio server in cambio di un token di accesso.
  3. Utilizzare l'autenticazione basata su token per le successive chiamate API.

Sono sulla buona strada? In tal caso:

  1. C'è una libreria JS che gestisce più provider o ognuno di essi richiede qualcosa come l'SDK JS di Facebook?
  2. Che aspetto dovrebbe avere la mia API che genera il token? In particolare, di cosa ho bisogno dal provider Oauth e come posso verificarlo sul server?

risposta

2

Sarà più facile per voi per gestire il processo di autenticazione contro i provider di identità sul lato server e non sul lato client. Quindi il server REST deve supportare il proprio metodo di autenticazione (che potrebbe anche essere basato su OAuth) e trasferirlo al provider di terze parti. Così un flusso sarà simile a questo:

  1. avviare un processo di login dal client (JS) - chiamare l'endpoint REST autenticazione, specificando la rete che si desidera eseguire il login per (ad esempio myserver.com/login?provider = facebook).

  2. Gestire la procedura di accesso sul lato server - reindirizzare all'endpoint di accesso del provider, ricevere la richiamata di accesso, elaborare la risposta (ottenere il token di sessione di Facebook ecc.).

  3. Emettere la propria sessione utente (o token se si sta eseguendo OAuth) e rispondere al client JS.

ci sono un paio di librerie d'accesso sociali che possono aiutare, controlla http://hybridauth.sourceforge.net/ per PHP o http://code.google.com/p/socialauth/ per Java.

Ci sono anche un paio di soluzioni commerciali che possono semplificarti la vita (sto lavorando per Gigya quindi sono di parte), ma è solo se hai un budget.

+0

Grazie, questo ha senso dal punto di vista tecnico. Stavo pensando da un angolo UX, sperando che ci fosse un modo per rimanere all'interno della mia app a pagina singola senza reindirizzamento. Sembra che sia possibile per Facebook usare il loro SDK JS, ma probabilmente non più in generale. –

+0

Puoi evitare di reindirizzare dalla tua pagina aprendo un popup.Non è necessario reindirizzare l'endpoint REST di accesso dalla singola pagina, è possibile aprire un popup a tale endpoint e il reindirizzamento all'IDP (come Facebook) verrà eseguito in tale finestra popup. Alla fine del processo di login devi segnalare dal popup al JS sulla tua pagina principale con la risposta e la sessione di login. –

+0

Perfetto! Dato che ho lavorato solo in una singola finestra, non avevo pensato di comunicare tra un popup e la pagina. –

6

Si consiglia di generare un codice di accesso API o utilizzare un flusso OAuth separato specifico per la propria API. Concettualmente vorrai separare l'atto di creare un account con il tuo servizio e collegare gli account remoti. Probabilmente potresti tirare fuori quello che stai descrivendo, ma sarà confuso.

Per rendere più facile OAuth nel client, controlla oauth.io

Problemi correlati