Si tratta di un'implementazione dell'autenticazione JWT corretta?

8

Ho creato un'API RESTful di Flask che richiede una email / password e il flusso di login di Facebook. Probabilmente sarà necessario estenderlo in futuro per supportare più accessi social.

Ho scelto di autenticare gli utenti usando JWT.

Poiché desidero supportare più tipi di flussi di accesso, ho pensato di dover definire un tipo di sovvenzione personalizzato per ogni tipo di accesso.

Ho dato un'occhiata a Flask-JWT , ma questo non sembra supportare i tipi di sovvenzione personalizzati, nemmeno per i token di aggiornamento.

Poiché non sono riuscito a trovare un'altra implementazione di JSW di Flask, ho dovuto scrivere la mia. Il mio codice funziona, ma ho alcune preoccupazioni, considerando che non esiste un plugin Flask che soddisfi i miei requisiti.

  • È una buona pratica del tutto definire i tipi di sovvenzione personalizzati? rfc6749 afferma che è supportato.
  • Ho implementato correttamente il flusso di autenticazione del token di email / password / aggiornamento ( Figura 1 )?
  • Ho implementato correttamente il flusso di autenticazione di Facebook ( Figura 2 )?
  • Sto utilizzando uuid4 per generare token di aggiornamento. È una buona idea?

    
posta Remco Haszing 17.05.2016 - 23:18
fonte

1 risposta

2

Disclaimer: è più un commento che una risposta, ma avevo bisogno di più spazio.

Prima di tutto, nonostante le JWT siano semplici, i flussi di OAuth2 tendono a essere complicati e ingombranti. Per autenticare usando Google, Facebook e amp; co., in genere non ricevi token direttamente.

  1. L'utente dice "Voglio accedere"
  2. La tua app dice, oh, uh, ecco un reindirizzamento di Facebook
  3. L'utente accede e un URL di richiamata da te viene chiamato con un codice
  4. Sul lato server, ricevi il codice e fai una chiamata a Google / Facebook per scambiare il codice per un JWT
  5. Ora lo verifichi
  6. Quindi, ok, l'utente è autenticato e puoi reindirizzare alla pagina originale

... può anche essere sgradevole nel senso che molti provider gestiscono le cose in modo leggermente diverso, e che per ciascuna di esse è necessario registrare e memorizzare coppie di chiavi segrete.

Onestamente, è un dolore e consiglierei di utilizzare servizi di terze parti come: link

Aggiornamento : nel frattempo, mi sembra che le librerie di OAuth siano progredite e diventino più semplici mentre il servizio di auth0.com è diventato più complesso. Quindi ora consiglierei di usare le librerie di codice direttamente ... eccetto se hai bisogno di supportare molti provider di autenticazione.

Il flusso è lo stesso, ma almeno lo hai semplificato. (E io non sono affiliato in alcun modo con loro)

    
risposta data 14.10.2016 - 19:50
fonte

Leggi altre domande sui tag