2014-07-03 8 views
6

Devo implementare il meccanismo di autenticazione e autorizzazione per la mia API REST. Questo è il riposo a cui si accede da un'applicazione mobile e un'applicazione web.Come implementare OAuth 2.0 come autenticazione basata su token per l'API di riposo a cui si accede da applicazioni Web mobili e javascript

Meccanismo Vorrei implementare:
Così come per la mia comprensione, io sto usando autenticazione basata su password. L'applicazione mobile o l'applicazione web javascript invia nome utente e password su richiesta HTTPS per ottenere il token di accesso per un periodo di tempo limitato.

Problema

  1. Come token di accesso scade ogni 1 ora o giù di lì. L'utente finale è nuovamente invitato a inserire nome utente e password. Questo non è accettabile.
  2. Se aumentiamo il tempo del token per un periodo più lungo, se qualcuno viene gestito sul token può avere accesso alle API Rest per più tempo. Poiché l'applicazione Web è un'applicazione javascript, è facilmente disponibile nel testo del piano.

Quindi sto cercando di capire come applicazioni come Facebook e Twitter implementano l'autorizzazione per le loro applicazioni mobili native. Ricordano per sempre il token di accesso memorizzando nella memoria locale. In modo che se alcune applicazioni dannose hanno accesso root al telefono Android possono accedere ai token.

Quali sono i miglioramenti del meccanismo sopra riportato per farlo funzionare sia per l'applicazione Web standalone che è sviluppata in applicazioni javascript e Android?

risposta

1

I token di accesso sono infatti pensati per essere di breve durata. Per mantenere l'autorizzazione per un lungo periodo di tempo, OAuth2 ha qualcosa chiamato "refresh token".

Se il provider lo supporta (e Google e Facebook lo fanno), il consumatore OAuth2 può richiedere un token di aggiornamento oltre al token di accesso durante il flusso iniziale (Google chiama "accesso offline", credo). Il token di accesso viene utilizzato normalmente ma quando scade, il consumatore può richiedere un nuovo token di accesso utilizzando le sue credenziali e il token di aggiornamento.

Vedere il documento di Google per ulteriori informazioni: https://developers.google.com/accounts/docs/OAuth2WebServer#offline.

+0

Ma se accedo da javascript non posso rivelare il mio token segreto che è necessario per il token di aggiornamento. Quindi, come otteniamo il token di aggiornamento quando accediamo da javascript o da un'applicazione mobile pacchettizzata. –

+1

Immagino tu intenda che stai usando il flusso implicito, in cui il token di accesso viene dato direttamente al consumatore (JavaScript). Se è così che il flusso non supporta i token di aggiornamento. Nel tuo caso potresti voler esaminare la concessione della password (https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#others) dove l'utente fornisce le sue credenziali al consumatore e agli scambi di consumatori questi per un token di accesso e aggiornamento. Normalmente il consumatore dovrebbe anche fornire le proprie credenziali, ma potrebbe essere possibile renderlo facoltativo. –

+0

Nel caso di un'app mobile la concessione della password ha senso. Per te webapp, invece della concessione implicita, potresti usare la concessione del codice di autorizzazione. Ciò significherebbe che è il server che mantiene i token, non il javascript. –

Problemi correlati