Creazione di un'app Web che autentica gli utenti da due diversi database

4

Mi trovo in una situazione di programmazione scomoda e mi aiuterà molto ad ottenere il tuo contributo in questa situazione.

Sto costruendo un'app Web che prevede di autenticare gli utenti da un'altra applicazione separata (tramite chiamate API) e anche di autenticare gli utenti dal proprio database. Essenzialmente, ci sono due basi utente separate.

Supponiamo che l'app che sto creando sia App1 e che l'altra app a cui sto effettuando le chiamate API sia App2. Questa comunicazione è solo a senso unico; App1 effettua chiamate API a App2, ma App2 non effettua chiamate a App1. Gli utenti possono registrarsi in App1 e creare un account nel database di App1, ma durante questo processo App1 effettua una chiamata API a App2 per assicurarsi che l'e-mail / nome utente inserito in App1 non sia già presente in App2.

Ora, l'altro lato di questo. Se un utente è già registrato in App2, non è necessario andare e registrarsi di nuovo in App1. Possono semplicemente accedere a App1 e accedere. In tal modo, App1 invia una chiamata API a App2 per autenticare l'utente e crea una copia dell'account utente di App2 nel proprio database (App1).

I problemi sorgono quando ci sono due utenti distinti, uno in App1 e l'altro in App2, che condividono lo stesso nome utente. Ora, quando l'utente App2 tenta di accedere ad App1, ci saranno due utenti in App1 con lo stesso nome utente! Come si può evitare uno scenario come questo? E 'questo anche un posto in cui voglio essere (lavorando con la base utenti di App2)?

    
posta cornflakes24 06.09.2014 - 22:26
fonte

1 risposta

3

Esistono due modi in cui due utenti distinti che condividono lo stesso nome (XYZ) potrebbero esistere in entrambe le app.

Prima situazione:

  • L'utente XYZ esiste già in App2.
  • Anche un altro utente ha chiamato XYZ, ma non è la stessa persona, prova a registrarsi in App1 ma viene autenticato in App2, perché in qualche modo la password è la stessa dell'utente XYZ di App2 e una copia dell'account viene creata in App1.

Seconda situazione:

  • L'utente XYZ esiste già in App1.
  • Un altro utente ha anche chiamato XYZ, ma non la stessa persona, registra in App2 e, poiché non c'è comunicazione da App2 a App1, la creazione di tale utente ha esito positivo.

La prima situazione è molto difficile da trovare. Se App2 richiede che la password sia non banale, le possibilità di due utenti che creano esattamente la stessa password sono ridotte.

La seconda situazione è molto probabile. In tal caso, quando l'utente XYZ di App1 tenta di accedere, l'autenticazione contro il database di App2 fallirà perché le password non corrispondono e l'utente non sarà in grado di registrarsi in App1.

Possibile soluzione

  • Innanzitutto scopri quale è l'identificatore univoco degli utenti in App2. È il nome utente? È un indirizzo email?
  • Se si tratta di un indirizzo e-mail, essendo un indirizzo e-mail un ID generato esternamente che non può essere ripetuto, è necessario anche rendere l'indirizzo e-mail e non il nome utente l'identificatore in App1.
  • Se è il nome utente che fornisce l'unicità in App2, allora siamo sfortunati. Poiché non hai il controllo di App2, non puoi assolutamente impedire a una persona distinta di creare un account con il nome utente esatto esistente su un'applicazione non correlata.
  • Scopri se App2 utilizza un'autorità di autenticazione di terze parti (vedi sotto) e adottala tu stesso.
  • L'unico modo per rendere tale interoperabilità è far sì che App1 e App2 facciano ricorso a una terza parte per generare identità. Un esempio di questo è l'utilizzo di un indirizzo di posta come identificatore (gli utenti devono accedere all'indirizzo di posta elettronica per registrarsi con successo poiché un link per completare la registrazione viene inviato a quell'indirizzo), o usando Facebook o Goole come StackExchange o altro fornitore di centralizzato l'autenticazione.

Se non si applica nulla di quanto sopra e poiché App1 utilizza App2 come autorità di autenticazione senza conoscenza di App2 e poiché non si ha il controllo su App2, si riconsidererà l'intera relazione con App2.

    
risposta data 07.09.2014 - 02:14
fonte

Leggi altre domande sui tag