【问题标题】:Should I make 3rd party API calls in backend or frontend?我应该在后端还是前端进行第 3 方 API 调用?
【发布时间】:2018-08-31 00:50:26
【问题描述】:

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

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

用户请求我的 API 授权端点,该端点具有 Azure 的密钥,然后用户被重定向到 Microsft oAuth 登录页面。登录 oAuth 后,Microsoft 会将用户重定向到我的 API,在那里它将 JWT 令牌保存在用户的 cookie 中,因此用户可以随时刷新令牌。

为了刷新令牌,用户只需调用具有密钥的myapi.com/auth/microsoft/token,然后它就会刷新。

【问题讨论】:

    标签: node.js azure-active-directory microsoft-graph-api


    【解决方案1】:

    一般来说,我建议始终从后端拨打第 3 方电话。它为您提供更多控制权并避免任何跨源并发症。

    您还想了解任何 API 密钥。大多数 API 都需要密钥才能访问,而且该密钥通常是私有的,您不希望在前端共享。

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

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

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

    【讨论】:

    • 登录过程由 API 和 Microsft Azure 处理,客户端只需向 myapi.com/auth/microsft/authorize 发出 GET 请求。密钥在服务器中。
    • 您仍然需要一些机制来确保myapi.com/auth/microsft/authorize 是安全的并且调用它的客户端是有效的。否则,您会将其对请求用户令牌的恶意客户端敞开大门。
    • 另外说明,您可以将访问令牌发送到后端并使用the on-behalf-of flow 将访问令牌交换为下游 API 的新访问令牌和刷新令牌。
    • 可以参考here中的Azure AD库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2018-02-03
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2021-12-07
    相关资源
    最近更新 更多