在有和没有用户上下文的情况下调用 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 token
(authorization code
流);
Web 应用程序通过 HTTP 请求标头中的 access token
从用户服务获取用户详细信息。
我还有一个没有用户上下文的守护程序微服务。我也想允许这个守护程序服务从用户服务中获取用户详细信息。对于这种情况,我将使用client credentials
flow。
如何正确组织用户服务rest api?
我正在考虑这种方法:
用户数据可在此 URL/users/userId/info
获得;
具有用户上下文的应用程序(即使用authorization code
流为特定用户颁发访问令牌)只能使用current user
或current 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