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

Boy*_*smo 2 asp.net-web-api single-page-application asp.net-core identityserver4

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

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

app_user

这是解决方案资源管理器

solution_explorer

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

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

  • 我应该将我的用户存储在会话中吗?然后从那里访问它?
  • 我应该使用connect / userinfo端点吗?

请指教。

Ara*_*yan 5

的想法IdentityServer是分离用户身份的概念。简单来说,这意味着您web API不应该/将不能访问存储用户的数据库。

一切有关用户身份是nessaccary中web API应包含在access token被批准IdentityServer。(例如在声明中)

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

public class UserInfo
{
    public string UserSubject { get; set; }
    public int Points { get; set; }
    public ICollection<Wallet> Wallets { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

如果需要Points和/或Wallets某个用户,则可以sub从这些声明中获得声明,并在数据库中查询它。

这也意味着您需要按用户主题存储Points和存储Wallets