2

因此,根据我在 IdentityServer 上阅读的内容,我应该在声明中存储有关用户的详细信息,例如名字和姓氏。那么 Web 应用程序如何能够访问索赔信息?由于用户信息端点需要一个代表用户的有效访问令牌,我想我需要创建一个可以访问返回其他用户的配置文件信息的 API?这是正确的方法吗?(用例,网页需要显示存储在另一个用户的声明中的联系方式)

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

4

1 回答 1

3

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

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

基本的持久性并不太难(它只有 12 或 13 个 SQL 语句),但它远远超出了 Stackoverflow 的答案。我在这里写了一篇关于非 EF 方法的博客——也不是生产就绪代码(例如,它有专门的 SQL 来保持简单),但它应该能让你开始。

于 2018-03-15T22:26:51.367 回答