我应该在后端还是前端进行第三方API调用?

Luc*_*mes 2 node.js azure-active-directory microsoft-graph

我有一个API,该API需要来自Microsft Graph API的一些数据。我当时正在考虑在我的API中实现一个端点,以刷新令牌并使用该令牌从前端进行调用。我不知道这是最佳还是安全,因此我提出了问题。

编辑1:为了更好地了解我所拥有的,这就是我目前的逻辑。请告诉我这是否正确。

用户请求我的API的授权终结点,该终结点具有Azure的秘密密钥,然后将用户重定向到Microsft oAuth登录页面。登录oAuth后,Microsoft会将用户重定向到我的API,在该API中将JWT令牌保存在用户的Cookie中,以便用户可以随时刷新令牌。

为了刷新令牌,用户只需简单地调用myapi.com/auth/microsoft/token,就拥有密钥,然后刷新。

Sam*_*eff 6

通常,我建议始终从后端拨打第三方电话。它为您提供了更多控制权,并避免了任何跨源并发症。

您还想知道任何API密钥。大多数API都需要一个密钥才能访问,并且通常该密钥是私有的,您不想在前端共享。

MS Azure API具有应用程序和秘密令牌。您不能将秘密令牌公开给客户端。要直接从客户端进行调用,您可以使用OAuth获取JWT令牌,然后可以使用该令牌从SPA调用到MS Web API中。

https://docs.microsoft.com/zh-cn/azure/active-directory/develop/authentication-scenarios#single-page-application-spa

相比之下,还有其他第三方API仅设计为从前端调用。例如,Stripe是一种支付处理API,其中UI可以直接调用Stripe,然后客户的支付信息实际上不会传递给主机应用程序,而只会传递给Stripe。这样可以提高安全性。

  • 您仍然需要一些机制来确保`myapi.com/auth/microsft/authorize'是安全的,并且调用它的客户端有效。否则,您会向要求用户令牌的恶意客户端敞开大门。 (2认同)
  • 另一个要注意的是,您可以将访问令牌发送到后端,并使用[on-behalf-of-flow](https://docs.microsoft.com/zh_cn)将访问令牌交换为下游API的新访问令牌和刷新令牌。 -us / azure / active-directory / develop / v1-oauth2-代表流量)。 (2认同)