Come gestire la registrazione OAuth2 dove l'indirizzo e-mail esiste già come account utente?

2

Sto creando un flusso di lavoro OAuth2 che si estende su sito Web e app mobili.

Ho bisogno di sapere se il seguente flusso di lavoro è sicuro, dove una registrazione OAuth2 è completata, ma si scopre che l'indirizzo email dell'utente autenticato esiste già nel database dell'applicazione.

Attualmente nella nostra logica di applicazione se l'utente OAuth2 esiste già nel database, l'ID dell'account OAuth2 (ad esempio Google o Facebook) viene semplicemente assegnato alla tabella utente nel database e l'accesso all'account è concesso.

Sono preoccupato che questo sia potenzialmente insicuro, ma riflettendolo penso che potrebbe essere effettivamente OK, dopo aver considerato quanto segue:

  • Abbiamo già verificato l'account email dell'utente in precedenza sulla registrazione utente non OAuth2, quindi sappiamo che questo account email appartiene al nostro utente.

  • Poiché le comunicazioni sono da server a server per recuperare l'e-mail dell'account OAuth2, il provider OAuth2 non può essere indotto a restituire un indirizzo email diverso, a condizione che venga utilizzata la stessa URL di richiesta.

  • Facebook richiede la verifica dell'indirizzo email al momento dell'iscrizione e Google è il fornitore dell'account e-mail e non consente la modifica dell'indirizzo email. Pertanto, sappiamo che il provider OAuth2 ha verificato la proprietà dell'indirizzo email.

Ho visto un'app che richiede che l'utente inserisca la sua password dell'account se accedi con OAuth2 ma ha già un account con la stessa email, ma questo non ha senso, come se un utente malintenzionato fosse in grado di superare l'autenticazione UI per il provider OAuth2, quindi presumibilmente hanno anche accesso all'account di posta elettronica (sicuramente nel caso di Google) e quindi potrebbero ottenere facilmente un'e-mail di reimpostazione della password.

Quello che voglio evitare di fare è concedere l'accesso a un account utente a un utente malintenzionato perché ha presentato un ID OAuth2 con lo stesso indirizzo email.

Riesci a vedere qualche difetto nelle mie supposizioni sopra?

    
posta gb2d 11.02.2017 - 16:45
fonte

1 risposta

1

Sto facendo la stessa identica cosa, ma con un provider di identità in cui controlliamo indirettamente chi crea un account e con quale indirizzo di posta.

Non riesco a vedere alcun difetto nei tuoi pensieri, ma sarei comunque a disagio.

  1. Ti stai fidando di un'entità esterna per controllare i tuoi utenti. Sono consapevole che questa è la premessa di base di oauth / openid connect, ma ti stai fidando che il processo di verifica rimane lo stesso com'è ora. Hai qualcosa in atto da notificare quando cambia?

  2. Edge case: un utente chiude un account facebook / google, un altro registra lo stesso indirizzo email.

  3. Assicurati di documentare la procedura con cui devono essere scelti i provider di identità (ad esempio, non devi consentire ai provider che non verificano). Le persone che sanno che questo è un caposaldo del tuo modello di sicurezza potrebbero trasferirsi in altri progetti e le persone che non si rendono conto delle conseguenze potrebbero voler aggiungere altri IdP in futuro.

Ho pensato a una soluzione diversa in cui avrei inviato ai miei utenti un URL con un elemento lungo e casuale (come un link di reimpostazione password) e quando l'hanno colpito, avrei richiesto loro di accedere usando oauth. In questo modo, saprei con certezza chi erano, perché è stato me a inviare loro il link dell'URL a un indirizzo mail che avevo verificato. Potresti inviare quella mail al primo tentativo di accesso, quindi apparirebbe esattamente come una reimpostazione della password, meno la voce effettiva di una nuova password - l'utente deve inserire il suo indirizzo email, verificare se esiste nel database e inviarlo il link di accesso , che collegherà l'identificativo dell'oggetto token id all'account utente corretto.

    
risposta data 13.02.2017 - 00:48
fonte

Leggi altre domande sui tag