Gestione utenti: Identity Management di terze parti vs utente locale

2

Contesto

Consideriamo un'applicazione web standard per la gestione delle auto. Ogni macchina ha un proprietario. Quindi la struttura dell'automobile assomiglia a:

cars(
  id INTEGER PRIMARY KEY,
  ...
  owner_id *???*
)

Per ragioni di semplicità, sto utilizzando un Identity Management esterno, nel mio caso Auth0 . La mia domanda è "come rappresentare gli utenti in un database quando esternalizzi completamente Identity Management?" . Tutte le informazioni relative al profilo utente (come le informazioni personali) sono gestite dall'IDM di terze parti.

Opzione 1: mappatura degli utenti locali rispetto agli utenti esterni

Viene creata una tabella User locale:

users(
  id INTEGER PRIMARY KEY, -- local user id
  external_id TEXT,       -- id in the third party IDM
)

Quindi, Car è mappato all'ID utente locale:

cars(
  id INTEGER PRIMARY KEY,
  ...
  owner_id INTEGER FOREIGN KEY REFERENCES users(id)
)

Pro

  • Imponi la coerenza dei dati: l'auto non può essere assegnata a un utente inesistente
  • In caso di modifica IDM, solo la tabella users deve essere rimappata

Contro

  • Il back-end deve catturare l'evento di iscrizione per archiviare l'id esterno nel suo database
  • Dopo l'autenticazione, l'IDM esterno deve inviare le informazioni OK, external_id XXX è autenticato, il suo ID locale è YYY .
  • il database / back-end deve sapere quando viene creato un nuovo utente
  • Tipo di duplicazione delle informazioni sull'ID utente

Opzione 2: usa l'ID esterno

users tabella non viene creata e cars proprietà è definita da:

cars(
  id INTEGER PRIMARY KEY,
  ...
  owner_id TEXT NOT NULL -- the ID in the external IDM
)

Pro:

  • Il back-end è completamente libero dalla gestione delle identità (nuovo utente, login, password dimenticata ...)
  • dopo l'autenticazione, se si utilizza JWT, è possibile utilizzare l'ID fornito dall'IDM esterno e non c'è alcuna mappatura da fare

Contro:

  • IDM-dipendente. Ho notato che su Auth0, anche l'ID utente social dipende dal tuo tenant, quindi se un nuovo tenant viene usato o peggio, il provider IdaaS cambia, è necessario eseguire molte modifiche.
  • L'integrità dei dati non è garantita per la proprietà dell'automobile poiché non esiste un modo per impostare un vincolo a livello di database

Le mie conoscenze

Vorrei andare per l'opzione 1 perché il mio OCD chiedeva l'integrità dei dati, ma l'opzione 2 esiste da qualche parte in questo mondo?

    
posta Al-un 28.10.2018 - 16:39
fonte

1 risposta

2

Non esiste un'unica risposta corretta. La risposta giusta per te dipende dalle tue esigenze e da come hai scelto di modellare il problema.

A seconda dell'importanza dei dettagli del proprietario, possono essere un'entità nel proprio diritto (che richiede la propria tabella) o potrebbero semplicemente essere un attributo dell'auto.

Se desideri catturare / archiviare dettagli del proprietario oltre il loro id, ti consiglierei il primo approccio. Se desideri mantenere esternamente i dettagli del proprietario, segui il secondo.

Solo perché il suo strano o non convenzionale non significa che è sbagliato.

    
risposta data 29.10.2018 - 09:15
fonte

Leggi altre domande sui tag