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

时间:2016-10-19 15:04:24

标签: asp.net-web-api asp.net-core single-page-application identityserver4

我正在尝试构建SPA网络应用+ IdentityServer4 + ASPNET核心+ ASPNET核心身份。我已经关注了Identityserver文档中的快速入门,它非常棒。我对quickstart Identity Server Quickstart with JS Client

更感兴趣

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

app_user

这是解决方案资源管理器

solution_explorer

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

我如何实现这一目标? (以下所有描述的内容我只是在线阅读并且我不确定如何实现它)

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

请告知。

1 个答案:

答案 0 :(得分:4)

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

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

在您的示例中,您可以从Wallets中删除ApplicaionUserpublic 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,您可以从这些声明获得Points声明并查询您的数据库。

这也意味着您需要按用户主题存储Walletsdeploy.prototxt