【问题标题】:RESTful API: how to distinguish users requests from front-end requests?RESTful API:如何区分用户请求和前端请求?
【发布时间】:2022-04-28 03:03:52
【问题描述】:

所以,我有一个 RESTful API(使用 Hapi.js 构建),它具有用户使用的端点和我的前端应用程序(使用 Next.js 构建)。 GET api/candies就是其中之一,我以它为例。

前端询问存储在我的数据库中的糖果列表,并将它们显示在任何人都可以访问的页面上(必须是这种方式)。前端不提供 API 令牌,因为人们可以阅读/使用它。但是,想要获得这个糖果列表(用它来构建任何他们想要的东西)的用户必须提供一个有效的 API 令牌(他们通过在我的前端应用程序上创建一个帐户来获得)。

我的 API 如何判断对 api/candies 的请求是来自用户还是来自我的前端应用程序,以便它可以验证(或不)其令牌的有效性?

我想知道我的问题是否也与网络抓取有关。

谁能帮帮我? :D

【问题讨论】:

    标签: rest http authentication hapijs


    【解决方案1】:

    不久前我也想过同样的问题。如果您的前端有客户端 REST 客户端(JS+XHR/fetch),那么我认为不可能可靠地做到这一点,因为无论您如何识别前端 REST 客户端,您的用户都可以复制它只需通过 CTRL+SHIFT+I 在浏览器中检查 HTTP 请求即可。甚至还有使用浏览器的自动化工具,例如硒。如果你有一个服务器端 REST 客户端(例如 PHP+CURL),那么只需为前端创建一个消费者 ID 并使用一个令牌。即使在这种情况下,我也可以轻松编写几行代码,将前端用于相同的请求。因此,如果您想以在前端免费提供的金钱来出售相同的服务,那么您在这里就不走运了。这并不意味着不会有消费者愿意为此买单。

    我认为你的问题是糟糕的商业模式。

    【讨论】:

    • 非常感谢您的清晰解释!你是对的,商业模式是问题所在。我会接受您的回答作为解决方案,因为它解释了为什么无法用一些代码解决问题:)
    【解决方案2】:

    您的要求可以通过检查不同用户代理发送的不同标头来解决。您还可以从前端添加自定义标头并在后端进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2014-06-28
      • 2011-06-20
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多