oauth-2.0 - OpenID 为当前登录用户以外的其他用户连接 Userinfo 端点

标签 oauth-2.0 identityserver4 openid-connect userinfo

以下场景:

您将敏感和 protected 用户信息(姓名、邮件地址、电话号码、地址)安全地保存在授权服务器(例如 IdentityServer4)中。

您有一个 API 从存储您自己的数据(不是敏感用户数据)的第二个数据库加载数据。这些数据以某种方式链接到用户(假设我们存储文档,文档 A 属于具有 auth-id“XYZ”的用户)。

问题:

现在,一个单页应用程序获取了一个文档列表,并希望显示拥有该文档的用户的姓名和电子邮件地址。

到目前为止,我理解 OpenID Connect UserInfo 端点只返回当前登录用户的用户信息,而不是其他用户。因此,需要在其他地方获取其他用户的信息。

解决方案1:将用户信息复制到第二个数据库中。这会将敏感数据从安全的授权服务器中泄漏出来,需要保持数据同步(如果在身份验证服务器上更改),这会在身份验证服务器与第二个数据库或身份验证服务器与 API 端点之间引入连接。

解决方案 2:让 AP​​I 访问 auth DB 并从那里获取数据。可能但引入了到授权 DB 的 DB 连接是什么(在我个人看来不好)。

解决方案 3:在授权服务器上引入一个端点(如 UserInfo 端点),让单页应用程序通过 auth id 请求用户信息。似乎最可行但似乎没有指定?

有没有官方指定/推荐的方法来解决这个问题?也许是我迄今为止错过的使用 UserInfo 端点的规范?

简单地 my.domain.com/userinfo/XYZ 返回具有 auth-id XYZ 的用户的信息???

最佳答案

以下摘自 OpenID Connect 规范的 user info endpoint section ,

The UserInfo Endpoint is an OAuth 2.0 Protected Resource that returns Claims about the authenticated End-User.



正如突出显示的部分所解释的那样,它公开了有关原始身份验证用户的信息。除非您拥有已为他们验证的 OAuth 2.0 访问 token ,否则无法获取有关其他用户的信息。

此外,不建议将端点嵌入到授权服务器。它带来了维护负担以及隐私问题。此外,这将阻止您更改授权服务器(例如:- 您销售此应用程序并且该客户使用 Azure AD)。所以不要做这种非标准的方式。

建议的解决方案是在用户创建此文档时获取用户名和电子邮件。在创建时,我相信应用程序有一个通过内容创建用户身份验证的访问 token 。因此,您可以从 user-info 端点获取声明并将它们与文档一起存储。当另一个用户获得文档时,您可以显示用户名和可选的电子邮件。可能您从不透露电子邮件,但可以向所有者发送邮件,这将在后端处理。

关于oauth-2.0 - OpenID 为当前登录用户以外的其他用户连接 Userinfo 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51442666/

相关文章:

Azure AD B2C - 自定义 Azure AD 自定义身份提供商的 UI

go - 使用存储在 Golang 自己的数据库中的用户创建 Google 身份验证服务

Firebase Admin SDK - 如何使用 OAuth2 刷新 token 进行初始化并与 Web 应用程序安全通信?

c# - disqus API 缺少必需的参数 : grant_type

apache - 无法验证身份服务器 SSL 握手错误

android - 如何修复 "Activity has leaked ServiceConnection net.openid.appauth.browser.CustomTabManager$1@41fb56d0 that was originally bound here"错误

oauth-2.0 - 如何使用 access_token 创建 CalendarService 对象?

cocoa - 如何监听 native Cocoa 应用程序的 OAuth2 重定向 uri

.net-core - IdentityServer4 将 client_ 附加到声明

curl - key 斗篷错误 : code already used for userSession