如何使用 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 客户端使用)
我该如何实现? (以下所有描述的点我只是在网上阅读,我不确定如何实现)
- 我应该将用户存储在会话中吗?然后从那里访问它?
- 我应该使用 connect/userinfo 端点吗?
请指教
IdentityServer
的想法是分离用户身份的概念。简而言之,这意味着您的 web API
不应该t/wouldn 无法访问存储用户的数据库。
web API
中与用户身份相关的所有内容都应包含在 IdentityServer
授予的 access token
中。 (例如在索赔中)
在您的示例中,您可以从 ApplicaionUser
中删除 Points
和 Wallets
字段并创建附加 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
声明并查询您的数据库。
也就是需要按用户主题存储Points
和Wallets
我正在尝试构建 SPA Web 应用程序 + IdentityServer4 + ASPNET Core + ASPNET Core Identity。我遵循了 Identityserver 文档中的快速入门,它真的很棒。我对快速入门更感兴趣 Identity Server Quickstart with JS Client
我一直在关注它,到目前为止一切顺利。现在我已经向我的用户添加了一些字段和相关表,如下所示:
这是解决方案浏览器
我想创建一个页面来显示我的用户及其相关 tables/fields。 (基本上,我的问题是,如何访问我当前的用户并公开一个 API 供我的 JS 客户端使用)
我该如何实现? (以下所有描述的点我只是在网上阅读,我不确定如何实现)
- 我应该将用户存储在会话中吗?然后从那里访问它?
- 我应该使用 connect/userinfo 端点吗?
请指教
IdentityServer
的想法是分离用户身份的概念。简而言之,这意味着您的 web API
不应该t/wouldn 无法访问存储用户的数据库。
web API
中与用户身份相关的所有内容都应包含在 IdentityServer
授予的 access token
中。 (例如在索赔中)
在您的示例中,您可以从 ApplicaionUser
中删除 Points
和 Wallets
字段并创建附加 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
声明并查询您的数据库。
也就是需要按用户主题存储Points
和Wallets