如何使用 IdentityServer4 访问我当前的用户?

How do I access my current user using IdentityServer4?

我正在尝试构建 SPA Web 应用程序 + IdentityServer4 + ASPNET Core + ASPNET Core Identity。我遵循了 Identityserver 文档中的快速入门,它真的很棒。我对快速入门更感兴趣 Identity Server Quickstart with JS Client

我一直在关注它,到目前为止一切顺利。现在我已经向我的用户添加了一些字段和相关表,如下所示:

这是解决方案浏览器

我想创建一个页面来显示我的用户及其相关 tables/fields。 (基本上,我的问题是,如何访问我当前的用户并公开一个 API 供我的 JS 客户端使用)

我该如何实现? (以下所有描述的点我只是在网上阅读,我不确定如何实现)

请指教

IdentityServer的想法是分离用户身份的概念。简而言之,这意味着您的 web API 不应该t/wouldn 无法访问存储用户的数据库。

web API 中与用户身份相关的所有内容都应包含在 IdentityServer 授予的 access token 中。 (例如在索赔中)

在您的示例中,您可以从 ApplicaionUser 中删除 PointsWallets 字段并创建附加 table 来存储它们,如下所示:

public class UserInfo
{
    public string UserSubject { get; set; }
    public int Points { get; set; }
    public ICollection<Wallet> Wallets { get; set; }
}

如果您需要与用户身份相关的信息,您可以从这样的声明中获取:

[Authorize]
public ActionResult SomeAction()
{
    var identity = (ClaimsIdentity)User.Identity;
    IEnumerable<Claim> claims = identity.Claims;
    ...
}

如果您需要 Points and/or Wallets 用户,您可以从这些声明中获取 sub 声明并查询您的数据库。

也就是需要按用户主题存储PointsWallets