【问题标题】:api authentication with node.js使用 node.js 进行 api 身份验证
【发布时间】:2016-10-21 14:35:24
【问题描述】:

我将创建一个 API 服务供我的客户使用。该 api 将返回一些数据,这些数据将显示给使用我客户网站的客户。 api不需要任何类型的用户数据。

我正在考虑使用 api 密钥并使用它来返回相关数据。但我想确保只有使用我客户网站的客户才能访问 api。

我的问题是,如果我在前端使用 api 并公开 api 密钥,任何人都可以从他们的浏览器中使用 api。我不希望这种情况发生。我该如何验证这个?如果这不起作用,我可以使用从服务器到客户端服务器的 api 吗?即使那样我将如何验证服务器?

我正在使用 nodejs 并在后端表达。有任何想法吗?谢谢!

【问题讨论】:

    标签: node.js api express


    【解决方案1】:

    如果您的 API 是公开的,没有用户身份验证,则无法限制对它的访问。
    有许多变通方法,例如检查引用者或创建特殊令牌,但它们都将存储在客户端,并且恶意者可以重用它。

    总的来说,这一切都没有意义。您已经向您的客户公开了您的 API。即使您创建了一个有效的算法,犯罪分子也可以简单地运行您的网站 JavaScript 方法来使其工作。你想保护什么?

    如果你限制对你的API的访问,那么最合适和最有效的方法是把这个API做后端,这样只有你在服务器端的webclient才能访问它。

    【讨论】:

    • 谢谢!。这就说得通了。即使我在客户端创建 api 后端,您是否知道如何验证请求来自正确的服务器?我知道我们并没有公开 api 密钥,只是为了确保。
    • @prdtuty 如果您使用服务器端方法并且您的服务器位于某种内部网络中,您可以简单地应用默认限制规则,如 IP 过滤、路由、证书 :) 通常,IP 过滤是够了 - 你在 192.168.0.1 有 Web 客户端,在 192.168.0.2 有后端 API,它只有一个端口(例如 80),仅对 192.168.0.1 可用。
    • 请求服务器不在内部。您认为在这种情况下我需要启用 CORS 吗?
    • @prdtuty CORS 与服务器安全无关 - 它保护您的用户。任何人仍然可以提出请求并忽略 CORS。
    【解决方案2】:

    这是一件棘手的事情;本质上限制了公共 api。归根结底,网页将出现在用户本地计算机上的浏览器中。因此,如果他们可以从浏览器访问它,那么他们也可以手动访问它们。 API 密钥确实是最好的方法,但这仅起到威慑作用,而不是访问控制。不幸的是,您放入浏览器的几乎任何访问控制类型都可以在浏览器之外被模仿。

    如果您想在某种程度上让用户登录,您应该查看json web tokens (jwt)。这不需要在用户级别,如果您愿意,可以在某种会话级别。但是,这不会限制用户直接访问 api。

    【讨论】:

      猜你喜欢
      • 2022-06-26
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多