Utilizzando il servizio di autenticazione OAuth esterno, come gestire le relazioni degli utenti

1

Sto provando a creare un'API e un client del sito web per questo. Ultimamente ho letto molto su OAuth2 come meccanismo di sicurezza e aziende che offrono l'autenticazione come un servizio come auth0.com o anche Azure attivo Directory e posso vedere i vantaggi nell'utilizzarli

Perché sono abituato ad avere sempre gli utenti nello stesso database e le tabelle con le relazioni con la tabella Utenti nel formato da Uno a Molti come sotto

public class User
    {
        public string subjectId { get; set; }

        public virtual List<Invoice> Invoices { get; set; }
        /*
        More properties in here
        */
    }

public class Invoice
    {
        public int InvoiceId { get; set; }
        public string PaymentNumber { get; set; }
        public DateTime Date { get; set; }
        public double Amount { get; set; }
        public string Description { get; set; }

        public virtual User User { get; set; }
    }

Le mie domande sono allora.

Se gli utenti sono memorizzati in un servizio di autenticazione esterno come Auth0.com,

  • In che modo la classe Invoice gestirà la relazione con l'utente?
  • Sarebbe solo l'aggiunta di una nuova proprietà subjectId nella tabella Invoice e questo prenderà il valore di qualsiasi id a cui è stato assegnato il servizio di autenticazione?

In quest'ultimo caso, la fattura di classe sarebbe qualcosa di simile in basso?

public class Invoice
        {
            public int InvoiceId { get; set; }
            public string PaymentNumber { get; set; }
            public DateTime Date { get; set; }
            public double Amount { get; set; }
            public string Description { get; set; }

            public string SubjectId{get;set;}
        }

Inoltre, se gli utenti sono memorizzati altrove, come fai una query come

Select * from Users u inner join Invoices i where Users.Name='John Doe' and i.Date>Somedate.
    
posta General Electric 01.05.2016 - 08:00
fonte

1 risposta

1

Con OAuth (incluso OAuth2 o OpenID per quella materia) avresti comunque un'entità utente locale. Dove si memorizzano le informazioni su questo utente dipende da voi. Nel caso del tuo esempio, dovresti creare una tabella utente nel tuo database, proprio come faresti normalmente.

Ciò che è diverso è che non si memorizzano le informazioni di autenticazione (come le password 1 ) nella tabella utente, perché, con OAuth, si scarica la parte di autenticazione sul provider OAuth e, come risultato, non hanno bisogno di queste informazioni.

Tutti i dati necessari nell'applicazione locale verranno comunque memorizzati in locale.

1 C'è qualche discussione sull'opportunità o meno di memorizzare le informazioni su di me localmente o su un round trip verso il provider OAuth.

    
risposta data 01.05.2016 - 11:56
fonte

Leggi altre domande sui tag