Moh*_*eni 12 security http node.js jwt
我有一条路线api/v1/track
,我想通过给定的轨道 ID 发送一些数据 (JSON),但我只想发送对我的前端请求或我的移动应用程序的响应,而不是来自任何地方的任何其他请求!
我正在使用 Node JS 和 Express,我实现了一些 JWT 配置,用于使用令牌对用户进行身份验证,但我不知道如何在没有任何预先创建的令牌的情况下限制此路由的访问
app.get("/track/:ID" , (req , res) => {
// Block forbidden requests ...
// If request is from my specific resource ( Frontend or App ) then :
res.json(something)
})
Run Code Online (Sandbox Code Playgroud)
我只是不想让人们使用我的 API 信息,我还需要在用户进行身份验证之前将数据发送到我的 Vue SPA。
jfr*_*d00 25
没有通用的方法可以将 API 的使用仅限于您自己的网页。网络上的 API 是“在网络上”的,网络上的任何编程工具都可以访问它。
正如其他人所说,您可以实现 COR 保护,但这只会阻止人们在自己的网页中通过自己的 Javascript 访问您的 API - 它不会阻止其他脚本或编程工具(如curl)访问您的 API。COR 是一种客户端保护,仅在现代浏览器中强制执行。COR 不适用于访问 API 的其他方式,例如通过脚本或其他编程工具。
这里唯一真正的解决方案是对所有 API 请求实施身份验证,然后保护您的服务器免遭 API 的滥用。身份验证背后的想法是,在 API 提供任何结果之前,您需要某种经过身份验证的登录/帐户。为了在您自己的网页中使用,您可能拥有某种可用于身份验证的登录名。
然后,在服务器上,您需要每次 API 调用来检查是否存在登录凭据,例如经过验证的登录 cookie、经过验证的 JWT 令牌等...
这会阻止公开使用您的 API,但显然人们仍然可以在您的网站上创建帐户,然后使用这些凭据以编程方式使用您的 API。控制这种情况的唯一方法是实施服务器端保护,例如速率限制,以防止滥用 API,从而影响服务器的质量或响应能力。
对于 Google 等地方的 API 服务器,它们通常会要求您注册某种开发者帐户并获取一些 API 访问凭据,然后您可以将其与 API 一起使用。作为其中的一部分,您必须同意他们的服务条款,如果您违反这些服务条款,他们可以撤销您的 API 凭证。他们还将通过速率限制来主动控制您的访问,在某些情况下还会限制带宽使用。