Database
 sql >> Database >  >> RDS >> Database

Accesso con servizi esterni

L'immissione di nome utente e password è un modo per accedere a un account, ma non è l'unico. In questo articolo vedremo come abilitare servizi esterni (come Google o Facebook) quando si accede a un database.

Cosa sono gli accessi ai servizi esterni?

Dare a un utente la possibilità di accedere ai propri account di sistema tramite servizi esterni è una tendenza in crescita tra i web designer. Questa opzione può fornire diversi vantaggi, come dare agli utenti una combinazione di nome e password in meno da ricordare. Può anche aiutare gli amministratori a personalizzare le esperienze utente.

Quando le applicazioni Web offrono un accesso a un servizio esterno, la schermata di accesso è simile all'immagine seguente. Un utente può inserire il proprio login e password, oppure può fare clic su un pulsante che lo reindirizzerà al servizio di sua scelta (Facebook, Twitter, Google, ecc.) dove accederà e verrà reindirizzato all'applicazione originale.

Ecco una schermata di accesso di esempio da Vertabelo Academy:

Come funzionano gli accessi esterni

L'aggiunta di servizi di accesso esterni richiede del lavoro aggiuntivo da parte degli sviluppatori. I servizi di social media più diffusi utilizzano un protocollo chiamato OAuth 2.0 . Solo Twitter utilizza un protocollo precedente chiamato OAuth 1.0 . Il protocollo consente la lettura delle informazioni dell'utente come nome completo, e-mail, sesso, ecc. Le informazioni esatte disponibili dipendono dal servizio di social media e da qualunque cosa l'utente abbia fornito. (Ad esempio, è possibile avere un account Facebook senza un indirizzo e-mail allegato.) In ogni caso, ci concentreremo su come implementare questo sistema nella progettazione di un database.

Come punto di partenza, utilizzeremo il nostro precedente articolo sul recupero della password e la conferma tramite e-mail come base. Ecco le tabelle relative agli utenti di questo articolo.




Progettazione di un database per accessi esterni

Molte informazioni nel user_account la tabella è correlata alla gestione dell'autenticazione, oltre a funzionalità correlate come il promemoria della password e la conferma dell'e-mail, da soli. Non abbiamo bisogno di queste colonne se l'utente si autentica con un servizio esterno. Il promemoria della password, la conferma dell'e-mail e altre funzionalità sono gestite dal servizio esterno. Il primo passo nella nostra progettazione è separare il user_account tabella in due tabelle:user_account e user_profile .

Il user_account table ora gestisce tutta la propria contabilità di autenticazione. Il user_profile la tabella rappresenta le informazioni sull'utente effettive:nome, e-mail, fuso orario, accettazione dei termini del servizio e così via. Tutte le tabelle aziendali ora dovrebbero essere correlate al user_profile tabella.

Ora ai conti esterni. OAuth il protocollo, alla fine, ci fornisce un identificatore per l'utente nel suo sistema. Questo identificatore non è il nome dell'utente nel sistema esterno. È solo un identificatore per la nostra applicazione. Dobbiamo memorizzare questo ID interno nel nostro database. Potremmo aggiungere colonne nullable facebook_id , google_id , twitter_id , ecc. alla tabella user_profile . Ma faremo qualcosa di diverso.

Aggiungeremo nuove tabelle:facebook_account , twitter_account , google_account , che memorizzerà l'ID esterno. In questo modo, se necessario, possiamo aggiungere ulteriori informazioni specifiche per ogni sito web social. Se vogliamo aggiungere una possibilità di accesso per un altro sito social, non dovremo modificare il user_profile tavolo. Aggiungeremo solo un altro external_service_account tabella.

Ciascuna delle nuove tabelle condivide lo stesso formato di colonna. Uno di questi sarà int user_profile_id , che è sia una chiave esterna che fa riferimento alla colonna id nel user_profile tabella e la chiave primaria. (Questa può fungere da chiave primaria perché non ci sono due account nel nostro sistema associati a più account dello stesso servizio esterno.)

L'altra colonna sarà l'id dell'account esterno – facebook_id , per esempio. C'è un vincolo univoco su ciascuno dei facebook_id , google_id e twitter_id colonne. Sappiamo che a due account non viene assegnato lo stesso ID. Infatti, quando l'utente viene autenticato con un servizio esterno, conosciamo il suo facebook_id . Quando troviamo la riga corrispondente nel facebook_account tabella e trova il user_profile , sappiamo quale utente ha appena effettuato l'accesso al sistema. Se non ci sono righe con questo ID, creiamo una nuova riga nel user_profile tabella e una nuova riga nella tabella account appropriata.

Ecco il modello finale: