在使用Identity Server保护的客户端之间共享用户信息

时间:2017-11-19 22:28:26

标签: asp.net-core identityserver4

我正在基于IdentityServer ASP.NET Identity快速入门创建.NET Core解决方案。我正在为IdentityServer,API和SPA客户端使用单独的项目。身份验证工作正常,但我对整体系统架构最佳实践以及IdentityServer和AP​​I项目之间的数据共享提出了疑问。

假设我的解决方案中有以下简化数据模式:

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和AP​​I之间共享User数据的推荐方法是什么? API是否应该访问IdentityServer使用的相同用户数据?每个应该使用相同的数据库,IdentityServer只使用User表,API使用UserSomeObject表吗?

基本上,在IdentityServer,API和SPA架构中,数据库如何适应?一个共享?有两个吗?如果最佳做法是不确定用户存储API,我是否需要额外的数据模型来存储API的用户信息?

感谢。

1 个答案:

答案 0 :(得分:1)

我会做两件事之一。

1。)创建一个新项目来封装用户管理器交互和业务逻辑。将其作为NuGet包包含在API和IdentityServer4实现中。

2.。)创建一个新的用户管理器API,您当前的API将用于获取用户详细信息,并让新API使用#1中的Nuget包。