Sto provando a determinare se utilizzare direttamente un token fornito da un servizio di terze parti, OPPURE emettere il mio token personalizzato e memorizzare il lato del server token di terze parti.
Flusso di autenticazione
-
L'utente autentica la propria identità tramite una terza parte (accesso basato su social media / gestione identità). Per fare questo inseriscono il loro nome utente e password nella pagina di accesso della Terza Parte (esposta come visualizzazione Web nell'app Client), e la Terza Parte restituisce all'App Client un 'Token di Autorizzazione'.
-
Il client invia il "token di autorizzazione" al mio server, che in combinazione con una "chiave dell'applicazione segreta" (fornita dalla terza parte) consente al server di scambiare il token di autorizzazione dell'utente per un "token di accesso" (il token in realtà ho bisogno di effettuare chiamate API per conto dell'utente). Ciò che accade sul lato server mi consente di mantenere la mia 'Secret Application Key' segreta e fuori dalla portata del Cliente.
-
A questo punto non sono sicuro se sia per ...
- Invia il token di accesso di terze parti al client in modo che possa essere incluso in tutte le future chiamate al server che chiamerà quindi l'API della terza parte, OPPURE
- Invia un token JWT personalizzato al client, memorizzando il token di accesso della terza parte sul server per ciascun utente.
Intendo effettuare tutte le future chiamate sul lato server API di terze parti, tuttavia i miei dubbi su ciascuna opzione sono:
- Se il client ha il proprio token di accesso per il servizio di terze parti, anche se consente solo l'accesso ai dati per i quali l'account ha accesso, significa che potrebbero effettuare ulteriori chiamate API contro i limiti di chiamata della mia applicazione.
- Se il server trattiene questo token di accesso di terze parti (non lo invia mai al client), crea una risorsa che è sensibile e deve essere archiviata e protetta. Penserei che sarebbe più sicuro avere solo temporaneamente accesso al token di accesso quando necessario.
Qual è il modo preferito di gestirlo?