Identityserver4 使用Identity Server进行配置文件管理

Identityserver4 使用Identity Server进行配置文件管理,identityserver4,identity-management,Identityserver4,Identity Management,因此,从我在IdentityServer上读到的内容来看,我应该在声明中存储有关用户的详细信息,例如名字和姓氏。那么web应用程序将如何访问索赔信息?由于用户信息端点需要一个表示用户的有效访问令牌,我想我需要创建一个API,该API可以访问返回其他用户的配置文件信息的API?这样做对吗?(用例,网页需要显示存储在其他用户声明中的联系人详细信息) 另外,在权利要求书中存储和检索多种语言配置文件信息的方式是什么?例如,用户可以有多种语言的名称/标题。我正在考虑制定[LanguageCode]\u[C

因此,从我在IdentityServer上读到的内容来看,我应该在声明中存储有关用户的详细信息,例如名字和姓氏。那么web应用程序将如何访问索赔信息?由于用户信息端点需要一个表示用户的有效访问令牌,我想我需要创建一个API,该API可以访问返回其他用户的配置文件信息的API?这样做对吗?(用例,网页需要显示存储在其他用户声明中的联系人详细信息)


另外,在权利要求书中存储和检索多种语言配置文件信息的方式是什么?例如,用户可以有多种语言的名称/标题。我正在考虑制定[LanguageCode]\u[ClaimType](fr_first_name)命名约定,或者将所有语言添加到profile IdentityResource中,或者为每种语言创建单独的资源。

最好的办法是使用IdentityServer4 QuickstartUI示例设置一个项目,并查看该代码,以更好地了解其工作原理。从版本4开始,Identity Server只关注登录/注销过程以及围绕身份验证的各种流程。它们还提供了一个基本的EF驱动的持久性模型,并且还支持ASP.NET核心身份持久性模型(也是EF驱动的),但这两个模型都不是用于生产的代码

基本上,用户详细信息的持久性被认为是您的责任。也就是说,用于ASP.NET核心身份验证的Cookie极大地限制了您可以/应该作为声明存储的数据量。最好的模式是将“真实”身份提供者(IDP)声明保留为声明,不向该列表添加新声明,将所需内容复制到完全管理的其他单独用户数据表中,并使用唯一声明标识符(几乎总是“主题id”)作为用户数据的密钥。这也使得将一个用户迁移到另一个IDP变得更容易(例如,您将知道“Bob”的用户详细信息,但他可以将他的用户数据从他的Facebook OIDC认证重新关联到他的Google认证)


基本持久性并不太难(只有12或13条SQL语句),但它比Stackoverflow答案中的内容要多得多。我在博客中提到了一种非EF方法——也不是生产就绪代码(例如,它有特殊的SQL来保持简单),但它应该可以让您开始使用。

您是否尝试过查看令牌?web应用程序可以直接从token userinfo中读取声明。只有在需要刷新数据时,才需要终结点@DaImTo“token userinfo端点”是什么意思?据我所知,这是两个独立的端点。根据userinfo端点要求登录用户提供访问令牌的文档,我可以使用令牌端点生成的带有客户端凭据的访问令牌进行尝试,但我认为文档中另有说明。我同意McGuireV10,只需为用户信息创建一个数据库,并将其与identity server分开即可。如果您有一个面向服务的系统,只需创建一个帐户服务来管理用户信息。您希望最小化令牌的大小和身份服务上的攻击面(安全方面)。