【问题标题】:Sharing User Information Across Clients Secured With Identity Server在使用 Identity Server 保护的客户端之间共享用户信息
【发布时间】: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 使用UserSomeObject 表?

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

谢谢。

【问题讨论】:

  • IdentityServer 只处理身份验证/授权。它不是一个用户管理系统。如果您使用使用用户的流程进行身份验证(即,不像客户端身份验证,因为客户端与用户不同),您将获得用户 ID。然后,您可以使用此用户 ID 在您的数据库中进行适当的更改/通过该 ID 从您的数据库中查找用户。所以,是的,一般来说,两个系统都需要访问数据库。
  • 我很想听听更多人对此的看法,或者更充实的答案。我对身份服务器独立于它自己的数据库的场景更感兴趣,并且 API 也以某种方式将它的用户存储在它自己的表中,再次存储在单独的数据库中。也许在身份服务器端进行身份验证后,身份服务器会通过帖子调用创建用户的API?

标签: asp.net-core identityserver4


【解决方案1】:

我会做两件事之一。

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

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

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多