Sto implementando l'accesso social con Facebook, Twitter e Google+ sulla nostra API REST protetta da OAuth2 (protetta usando spring-security-oauth
). Mi piacerebbe assicurarmi che il flusso seguente sia sicuro e che non stia introducendo buchi di sicurezza.
Panoramica
Esiste un'API REST e tre tipi di applicazioni client: web, iOS e Android. La comunicazione tra l'API e le applicazioni client avviene tramite HTTPS.
Flusso
- Le applicazioni client avviano il flusso di accesso social tramite il browser o le app native e realizzano l'intera "OAuth dance". Ottengono un ID utente e un token di accesso corrispondenti a questo ID utente.
- Le applicazioni client inviano l'ID utente e il token di accesso all'API REST come parametri
POST
al nostro endpoint token OAuth2 che specifica ungrant_type
personalizzato (facebook
,twitter
ogoogle
). - L'API REST contatta il social network corrispondente e lo convalida
- Il token di accesso è attivo.
- Il token di accesso è stato generato per l'utente specificato e per la nostra applicazione.
- Se le condizioni di cui sopra sono soddisfatte, prendiamo dal nostro DB l'utente con l'ID esterno specificato e generiamo il nostro token di accesso che può essere utilizzato in ulteriori richieste. Il token di accesso è mai salvato nel nostro database, solo l'ID utente.
Mi piacerebbe sapere se questo è il modo corretto di implementare l'accesso social in questo scenario e se ci sono delle insidie a questo intero flusso.