【问题标题】:ASP.Net Core MVC Identity with identityserver4带有 identityserver4 的 ASP.Net Core MVC 身份
【发布时间】:2018-12-28 18:42:05
【问题描述】:

我有几个问题。我有一个带有 identityserver4 和 EF 的 asp.net 核心应用程序的设置。效果很好。现在我想知道我必须以哪种方式将项目存储在数据库中。

我有七个用于身份数据库的表:

AspNetUSerRoleClaims - claims for roles (which roles has access to what)
AspNetRoles - roles of the user
AspNetUserClaims - claims of the user like firstname, country
AspNetUserLogins - how to use this table?
AspNetUserRoles - roles for users
AspNetUsers - user stored here
AspNetUserTokens - how to use this table

现在我已经在数据库中注册了一个用户和几个角色,并将连接设置为 AspNetUserRoles(哪个角色有用户)。 现在我想通过注册向用户添加更多信息,例如国家、给定名称、家庭名称。但是我必须将它们存储在哪里。仅在 AspNetUserClaims 中还是应该将信息存储在 AspNetUser 表中(通过 ApplicationUser 和 AspNetUser 表中的额外列)?

我如何将项目存储在 AspNetLogin 和 AspNetToken 表中,或者这是否由 Identityserver 自动完成?

提前感谢您的回答

【问题讨论】:

  • 是否存储为列或声明主要取决于意见 - 两种方法都有效。 IdentityServer 根本不使用 AspNet* 表 - AspNetLogins 存储链接到 AspNetUsers 的第三方登录(例如 Facebook、Google),AspNetUserTokens 用于链接到 AspNetUsers 和 AspNetLogins 的第三方登录令牌。
  • 好的,谢谢。我认为 Identityserver 使用声明表将它们放入 id-token 或 access-token 中?我看到还有一个 IdentityClaims 表,用户声明如何与 identityClaims 一起工作?
  • 不是直接的,不是的。请记住,IS4 不仅适用于身份 - 您可以在内存中拥有用户等,这些用户不可能从数据库中的 AspNetUserClaims 获得声明。这是一个扩展点 - IProfileService - 它位于 IS4 本身和 Identity 之间,用于在两者之间进行映射。 IdentityClaims 是一个 IS4 表,但这些代表了哪些声明可用于哪些 IdentityResources 的概念。这是一个很大的话题......
  • 啊,隧道尽头有光。非常感谢,现在我明白了

标签: asp.net-mvc asp.net-identity identityserver4


【解决方案1】:

我也有类似的问题,发了一篇相关的文章。

我能说的是这个……

  1. AspNet* 表是为正常的 AspNet Identity 身份验证创建的(即,如果您不使用其他身份验证机制或自定义用户存储)
  2. 如果要将列添加到 AspNetUsers 表,请扩展 IdentityUser 类。 (例如公共类 MyApplicationUser : IdentityUser),然后添加您的自定义属性(例如 FirstName)。这实质上改变了模型。为确保 EF 将模型更改写入 DB 表,您需要使用新的 MyApplicationUser 类扩展 IdentityDbContext 类。
  3. 如果要将用户的自定义声明(例如 hair_color)添加到 AspNetUserClaims 表中,则需要调用 userManager.AddClaimAsync()。您可以在注册过程或登录过程中使用表单中的数据或从外部身份验证提供商(如 Google、Facebook、Twitter 等)收到的声明执行此操作。
  4. 一般来说,如果您使用 IdentityServer,则不会使用 AspNetUserTokens 表,因为 IDS 的主要职责是颁发和验证令牌(id_tokens、access_tokens 等)

希望这有助于您入门。

我正在尝试确定是否将其他用户信息添加到实体(即 AspNetUsers)或将它们作为声明添加到 AspNetUserClaims 中是最佳做法。

【讨论】:

  • 感谢您的回答。我发现,您可以使用 AspNetUserClaims 获取更多信息。它在你手中,你如何添加这些信息。我将这些信息添加到声明中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 2021-02-11
  • 2016-07-30
相关资源
最近更新 更多