用户

时间:2018-07-20 12:34:26

标签: oauth-2.0 identityserver4 openid-connect userinfo

以下情况:

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

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

问题:

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

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

解决方案1:将用户信息复制到第二个数据库中。这会将敏感数据泄漏到安全的授权化服务器之外,从而需要保持数据同步(如果在auth服务器上进行了更改),从而将auth服务器连接到第二个数据库,或者将auth服务器连接到API端点。

解决方案2:让API访问身份验证数据库并从那里获取数据。可能,但是将DB连接引入到授权DB是什么(我个人认为不好)。

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

是否有官方指定/推荐的方式来解决此问题?也许有一个规范可以使用UserInfo终结点来完成我迄今为止错过的工作?

只需my.domain.com/userinfo/XYZ即可返回具有auth-id XYZ的用户的信息?

1 个答案:

答案 0 :(得分:1)

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

  

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

正如突出显示的部分所述,它公开了有关原始身份验证用户的信息。除非您具有为其他用户认证的OAuth 2.0访问令牌,否则无法获取有关其他用户的信息。

此外,不建议将端点嵌入授权服务器。它带来了维护负担以及隐私问题。另外,这将防止您更改授权服务器(例如:-您出售此应用程序且该客户使用Azure AD)。因此,请勿执行此类非标准方式。

建议的解决方案是在用户创建此文档时获取用户名和电子邮件。在创建时,我相信应用程序已经对内容创建用户进行了身份验证的访问令牌。因此,您可以从用户信息端点获取声明,并将其与文档一起存储。当其他用户获得文档时,您可以显示用户名和电子邮件(可选)。可能是您从不泄露电子邮件,而是可以向所有者发送邮件,该邮件将在后端处理。