我正在嘗試爲其創建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提供商獲取它們,或者是在第一次創建用戶時在本地添加它們。 –