IdentityServer4 + Asp.Net核心标识 - 将标识映射到应用程序数据库用户

Jaz*_*jef 11 asp.net-authorization asp.net-core identityserver4 asp.net-core-identity

我正在尝试使用Asp.Net核心身份实现IdentityServer4.我想使用IdentityServer4作为使用始终相同标识的API的集中身份验证/授权点.因此,我们的想法是将Asp.Net核心标识内容存储在充当身份存储库的SQL数据库中.

现在的问题是如何将集中身份映射到特定于应用程序的数据.我想在多个应用程序中使用相同的身份用户,但在每个应用程序中,用户都有其他相关实体,角色等.

我阅读了IdentityServer4的文档,但找不到与建议的结构相关的任何内容.

据我所知,您以某种方式将身份ID映射到本地应用程序用户.诸如firstname等的基本数据存储在集中式身份存储中,并且应用程序特定数据存储在应用程序特定数据库中.所以你不会在应用程序特定的数据库中保存名字等吗?在您需要的每个请求中,用户特定数据将查询身份服务器以获取信息/声明?注册流程怎么样?

有没有人有一个清晰的结构设置,可用于了解整个设置?(与Asp.Net Identity Provider,IdentityServer4,Protected Api等分离.)

raw*_*wel 7

所以你不会在应用程序特定的数据库中保存名字等,对吗?

是的,用户特定的属性应该进入用户配置文件并保存在 IdentityServer 的用户存储(数据库)中。应用程序特定的用户数据应存储在应用程序商店中。

在您需要用户特定数据的每个请求中,将查询身份服务器以获取信息/声明?

不一定,用户特定数据可以作为声明包含在身份令牌中。然后,声明将作为身份验证票存储在 cookie 中。对于每个请求,这些声明(存储在 cookie/s 中)可通过控制器的 User 属性获得

var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;
Run Code Online (Sandbox Code Playgroud)

您可以根据用户 ID 存储和查询与应用程序相关的用户数据(sub声明可以用作用户 ID)。

如果您在应用程序中需要大量特定于用户的数据,那么将所有内容都包含在身份令牌中并不是最佳选择,而且您不太可能为每个请求都需要这些数据。因此,当您需要额外信息时,您可以查询身份服务器的 UserInfo 端点。只需在身份令牌中包含识别用户所需的基本信息。

注册过程呢?

注册是一个完全独立的工作流程,与身份服务器无关。您只需要将用户保存到身份存储(可能使用 asp.net 身份)。当然,您可以将注册控制器与身份服务器一起托管,以便与身份相关的内容在物理上位于同一台服务器上。您也可以从您主持注册过程的任何地方写入 IdentityServer 用户存储(例如,单独的管理 UI,或从涉及电子邮件验证、手动批准等的工作流...)