代码之家  ›  专栏  ›  技术社区  ›  monty

用户中当前loggend以外的其他用户的openid connect userinfo终结点

  •  1
  • monty  · 技术社区  · 7 年前

    以下场景:

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

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

    问题是:

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

    到目前为止,我理解openid connect user info端点只返回当前登录用户的用户信息,而不返回其他用户。所以有必要在其他地方为其他用户获取信息。

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

    解决方案2:让API访问auth数据库并从中获取数据。可能,但引入了与授权数据库的数据库连接(我个人认为不好)。

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

    有没有官方指定/推荐的方法来解决这个问题?也许有一个规范可以使用到目前为止我忽略的userinfo端点?

    只需返回auth id xyz用户信息的my.domain.com/userinfo/xyz????

    1 回复  |  直到 7 年前
        1
  •  1
  •   Kavindu Dodanduwa    7 年前

    以下是从OpenID连接规范中提取的 user info endpoint section ,

    userinfo端点是一个受OAuth 2.0保护的资源,该资源 返回有关经过身份验证的最终用户的声明 .

    正如突出显示的部分所解释的,它公开了有关最初经过身份验证的用户的信息。除非您对其他用户的OAuth 2.0访问令牌进行了身份验证,否则无法获取有关这些用户的信息。

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

    建议的解决方案是在用户创建此文档时获取用户名和电子邮件。在创建时,我相信应用程序有一个对内容创建用户进行身份验证的访问令牌。因此,您可以从用户信息端点获取声明,并将它们与文档一起存储。当另一个用户得到文档时,您可以显示用户名和可选的电子邮件。也许你永远不会透露电子邮件,但可以给所有者发送邮件,这将在后端处理。

    推荐文章