Utilizando el Servicio de Autenticación de OAauth externo, cómo administrar las relaciones de los usuarios

1

Estoy intentando crear una API y un cliente de sitio web para ello. Últimamente, he estado leyendo mucho sobre OAuth2 como un mecanismo de seguridad y compañías que ofrecen autenticación como un servicio como auth0.com o incluso Azure active Directory y puedo ver las ventajas de usarlos

Porque estoy acostumbrado a tener siempre a los usuarios en la misma base de datos y tablas con relaciones con la tabla de Usuarios en la forma de Uno a Muchos, como a continuación

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; }
    }

Mi pregunta es entonces.

Si los usuarios se almacenan en un servicio de autenticación externo como Auth0.com,

  • ¿Cómo manejará la clase de factura la relación con el usuario?
  • ¿Sería simplemente agregar una nueva propiedad subjectId en la tabla de facturas y esto tomará el valor de cualquier identificación que el servicio de autenticación asignó?

En este último caso, ¿sería la clase Factura algo como abajo?

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;}
        }

Además, si los usuarios se almacenan en otro lugar, ¿cómo realiza una consulta como,

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

1 respuesta

1

Con OAuth (incluido OAuth2 u OpenID) aún tendría una entidad de usuario local. Donde usted almacena información sobre este usuario depende de usted. En el caso de su ejemplo, crearía una tabla de usuario en su base de datos, tal como lo haría normalmente.

Lo que es diferente es que no almacena información de autenticación (como las contraseñas 1 ) en su tabla de usuario, ya que, con OAuth, descarga la parte de autenticación al proveedor de OAuth y, como resultado, no necesita esta información.

Todos los datos que necesite en su aplicación local se almacenarán localmente.

1 Existe cierto debate sobre si la información de "recordarme" debe almacenarse localmente o no, o si se debe realizar un viaje de ida y vuelta al proveedor de OAuth.

    
respondido por el Jacco 01.05.2016 - 11:56
fuente

Lea otras preguntas en las etiquetas