【发布时间】:2018-05-03 02:55:12
【问题描述】:
我正在创建一个基于 IdentityServer ASP.NET Identity 快速入门的 .NET Core 解决方案。我正在为 IdentityServer、API 和 SPA 客户端使用单独的项目。身份验证工作正常,但我对整体系统架构最佳实践以及在 IdentityServer 和 API 项目之间共享数据有疑问。
假设我的解决方案中有以下简化的数据架构:
class User : IdentityUser
{
public string FavoriteColor { get; set; }
}
class SomeObject
{
public string OwnerId { get; set; }
public virtual User Owner { get; set; }
}
现在假设 UserA 使用 IdentityServer 创建一个帐户(和一个 User 记录),使用混合流登录,并检索可用于通过 API 进行身份验证的 access_token。然后用户A 调用API 上的某个API/some objects 端点,该端点应返回所有SomeObjects 的列表。 SPA 将向 UserA 显示SomeObject 的列表,包括每个对象的SomeObject.Owner.FavoriteColor 属性。
为了返回SomeObject.Owner.FavoriteColor 数据,API 需要访问User 存储。所以,我的问题是:在 IdentityServer 和 API 之间共享 User 数据的推荐方式是什么? API 是否可以访问 IdentityServer 使用的相同用户数据?每个人都应该使用同一个数据库吗,IdentityServer 只使用User 表,而API 使用User 和SomeObject 表?
基本上,在 IdentityServer、API 和 SPA 架构中,数据库如何适应?共享一个?有两个吗?如果最佳做法是不确定使用 API 存储用户,我是否需要额外的数据模型来在 API 上存储用户信息?
谢谢。
【问题讨论】:
-
IdentityServer 只处理身份验证/授权。它不是一个用户管理系统。如果您使用使用用户的流程进行身份验证(即,不像客户端身份验证,因为客户端与用户不同),您将获得用户 ID。然后,您可以使用此用户 ID 在您的数据库中进行适当的更改/通过该 ID 从您的数据库中查找用户。所以,是的,一般来说,两个系统都需要访问数据库。
-
我很想听听更多人对此的看法,或者更充实的答案。我对身份服务器独立于它自己的数据库的场景更感兴趣,并且 API 也以某种方式将它的用户存储在它自己的表中,再次存储在单独的数据库中。也许在身份服务器端进行身份验证后,身份服务器会通过帖子调用创建用户的API?
标签: asp.net-core identityserver4