我正在尝试为其创建API和网站客户端。最近,我一直在阅读很多有关OAuth2作为安全机制以及提供身份验证即服务的公司,如auth0.com甚至Azure Active Directory,我可以看到使用它们的优势当用户存储在外部身份提供商服务中时与用户的关系
因为我习惯了永远让用户在同一个数据库和表格中以一对多的形式与用户表格关联,如下所示
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; }
}
我的问题是这样的。
如果用户存储在外部认证服务,如Auth0.com,
- 如何发票类将处理关系到用户?
- 这是只是在发票表中添加一个新的属性subjectId,这将采取认证服务分配的任何id的值?
在后一种情况下,类的发票是否像下面的东西?
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;}
}
此外,如果用户存储在某处,你如何查询像,
Select * from Users u inner join Invoices i where Users.Name='John Doe' and i.Date>Somedate.
每OAuth的提供商为您提供了“用户id”成功认证后。用户ID在OAuth提供者中是唯一的。所以你必须存储信息:providername + userid。我通常创建一个至少有3个字段的[Users]表:MyUserID(int auto-inc或guid或...),ProviderName(字符串),ProviderUserID(字符串)。在你的情况下,我会把MyUserID放入你的发票中。 –
感谢您的答案,你能告诉你如何提出疑问,如果用户存储在外部服务中,给我这个名称的每个用户都有发票吗? –
“......至少3个字段”:)我总是创建一个更丰富的表格,其中包含OAuth提供者收到的更多信息:名字,姓氏,电子邮件等。有时我会添加包含本地信息的其他字段。同样,对于名字和姓氏,您可以决定是否从OAuth提供商获取它们,或者是在第一次创建用户时在本地添加它们。 –