【问题标题】:Securing API requests from Javascript保护来自 Javascript 的 API 请求
【发布时间】:2021-01-31 02:50:44
【问题描述】:

我有一个 javascript 前端,我需要对需要 API 密钥的第 3 方 API 进行 API 调用。我相当肯定,如果在 javascript 代码中使用该密钥,则无法真正保护该密钥,因为任何人只要尝试就可以找到它。

我还阅读了其他类似的问题,其中最重要的建议通常是“从服务器端发出请求”。这是有道理的,因为没有人会看到 API 访问密钥,但我对这个解决方案的不理解是,如果我调用这个新的中间层 API,仍然可以被浏览器发现的人发现...... .so 虽然他们无法再发现我正在尝试访问的 API 的 API 密钥 - 他们不再需要它,因为中间层只是为他们添加密钥并转发请求。我基本上创建了一种无需使用密钥即可访问 3rd 方 api 的方法。

(Javascript -> 向没有密钥的新 API 发出请求 -> 新 Api -> 向带有密钥的 3rd 方 API 发出请求 -> 新 API 将结果返回给 Javascript)

我在这里遗漏了什么吗?怎样更安全?不需要其他步骤来保护它吗?我试图在类似的问题中找到一个简洁的答案,但到目前为止还没有运气。

谢谢。

【问题讨论】:

    标签: javascript api rest security


    【解决方案1】:

    如果您想限制对将请求中继到真正 API 的服务器端点的潜在滥用,您可以使用与单个用户帐户相关联的身份验证令牌,这些令牌会在一定时间后过期。如果您发现某个特定用户使用 API 的次数比平时多得多,并且这给您带来了问题,您可以对其进行调查,并在需要时删除他们访问您的端点的权限。

    如果您根本不想对 API 进行任何任何身份验证,将 API 密钥保留在您的服务器上仍然可以帮助您,因为它可以让您稍后根据需要调整逻辑,不影响密钥现在。例如,您可能稍后决定将身份验证层添加到您的端点(如果您的密钥在此之前暴露,您可能会后悔,因为您必须获得一个新密钥)。

    保持密钥的私密性也可能是 API 的 TOS 的要求。

    【讨论】:

      【解决方案2】:

      您出于某种目的向 3rd 方 API 发出请求。这个目的需要对您的应用程序的用户有意义,并且应该有任何业务逻辑限制。

      如果您直接通过自己的服务器代理 API 请求并添加 API 密钥,那么您是对的……这与仅在前端拥有 API 密钥同样糟糕。

      但你不应该那样做。您的中间层不仅负责隐藏 API 密钥,它还准确控制可以调用哪些 API、使用哪些参数以及在您希望允许的特定条件下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 2019-02-16
        • 2016-11-13
        • 2015-02-03
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        相关资源
        最近更新 更多