我正在基于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。然后,UserA调用API上的某个API/some objects
端点,该端点应返回所有SomeObject
的列表。 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的用户信息?
感谢。
答案 0 :(得分:1)
我会做两件事之一。
1。)创建一个新项目来封装用户管理器交互和业务逻辑。将其作为NuGet包包含在API和IdentityServer4实现中。
2.。)创建一个新的用户管理器API,您当前的API将用于获取用户详细信息,并让新API使用#1中的Nuget包。