因此,根据我在IdentityServer上阅读的内容,我应该存储有关用户的详细信息,例如声明中的名字和姓氏。那么Web应用程序如何能够访问声明信息?由于用户信息端点需要一个代表用户的有效访问令牌,我想我需要创建一个可以访问的API,返回其他用户的配置文件信息?这是正确的方法吗? (用例,网页需要显示存储在其他用户的声明中的联系人详细信息)
在索赔中存储和检索多语言个人资料信息的方式是什么?例如,用户可以使用多种语言的名称/标题。我正在考虑制作[LanguageCode] _ [ClaimType](fr_first_name)命名约定,并将所有语言添加到配置文件IdentityResource或为每种语言创建单独的资源。
答案 0 :(得分:2)
您最好的选择是使用IdentityServer4 QuickstartUI示例设置项目,并查看该代码以更好地了解它的工作原理。从版本4开始,Identity Server 仅专注于登录/注销过程以及围绕身份验证的各种流程。它们还提供了基本的EF驱动的持久性模型,它们还支持ASP.NET核心标识持久性模型(也是EF驱动的),但这两者都不是生产就绪的代码。
基本上,用户详细信息的持久性被视为您的责任。话虽这么说,用于ASP.NET Core身份验证的cookie极大地限制了您可以/应该存储的数据量。最好的模型是将“真实”身份提供者(IDP)声明保留为声明,不要向该列表添加新声明,将您需要的内容复制到您完全管理的其他单独用户数据表中,并使用唯一声明标识符(几乎总是“主题ID”)作为用户数据的关键。这也使得将用户迁移到另一个IDP变得更容易(例如,您将了解“Bob”的用户详细信息,但他可以将其用户数据从他的Facebook OIDC身份验证重新关联到他的Google身份验证)。
基本持久性并不太难(它只有12或13个SQL语句),但它比Stackoverflow的答案要多得多。我写了一篇关于非EF方法的文章here - 也不是生产就绪的代码(例如,它有ad-hoc SQL来保持简单),但它应该让你开始。