4

我正在尝试构建一个 SPA Web 应用程序 + IdentityServer4 + ASPNET Core + ASPNET Core Identity。我已经按照 Identityserver 文档的快速入门进行了操作,它真的很棒。我对快速入门Identity Server Quickstart with JS Client更感兴趣

我一直跟着它,到目前为止一切都很好。现在我向我的用户添加了一些字段和相关表,如下所示:

app_user

这是解决方案资源管理器

解决方案探索者

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

我该如何做到这一点?(以下所有描述点我只是在网上阅读,我不知道如何实现它)

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

请指教。

4

1 回答 1

7

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

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

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

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和/或Wallets某个用户​​,您可以sub从这些声明中获取声明并查询您的数据库。

这也意味着您需要存储PointsWallets按用户主题。

于 2016-10-20T09:28:08.353 回答