在有和没有用户上下文的情况下调用 REST API

Posted

技术标签:

【中文标题】在有和没有用户上下文的情况下调用 REST API【英文标题】:Call REST API with and without user context 【发布时间】:2020-05-03 02:45:00 【问题描述】:

我有一个用户微服务。该微服务使用token authorization。现在它被 Web 应用程序使用。工作流程如下所示:

用户使用AzureAd OpenIdConnect 登录Web 应用程序; Web 应用程序接收access tokenauthorization code 流); Web 应用程序通过 HTTP 请求标头中的 access token 从用户服务获取用户详细信息。

我还有一个没有用户上下文的守护程序微服务。我也想允许这个守护程序服务从用户服务中获取用户详细信息。对于这种情况,我将使用client credentials flow。

如何正确组织用户服务rest api?

我正在考虑这种方法:

用户数据可在此 URL /users/userId/info 获得; 具有用户上下文的应用程序(即使用authorization code 流为特定用户颁发访问令牌)只能使用current usercurrent user 是管理员的数据,并且可以使用其他用户的数据; 没有current user 的守护程序应用程序(即使用client credentials 流为应用程序本身颁发访问令牌)可以为任何用户读取数据。

此类情况的最佳做法是什么?

【问题讨论】:

【参考方案1】:

我认为定义此 API 的最佳且更轻松的方法是构建一个唯一的端点 /users/id。 其中 id 可以是实际的真实用户 id 或预定义的值,例如“me”。如果 id 值为“我”,则用户服务必须从令牌中检索用户信息。 我要做的其他更改是使用users 而不是user,因为其他良好做法表明URL 中的元素是collection。 最后一个,不要使用info,因为它是多余的。因为当你查询一个实体时,你显然想要它的信息

【讨论】:

以上是关于在有和没有用户上下文的情况下调用 REST API的主要内容,如果未能解决你的问题,请参考以下文章

如何在有和没有支持的情况下在 ListVIew 中使用 MultiChoiceModeListener?

在有和没有大小写的情况下对数组中的相似单词进行计数[关闭]

如何在有和没有 ssh 身份验证的情况下将 Git 与两个不同的存储库一起使用?

在没有用户登录屏幕的情况下从Javascript调用安全的REST API

React Native 在有/没有 wifi 的情况下获取不同的结果

在没有用户名和密码的情况下授权 Salesforce REST API