【问题标题】:How to forbid unauthenticated requests from public API如何禁止来自公共 API 的未经身份验证的请求
【发布时间】:2017-03-28 20:52:23
【问题描述】:

我们有一个用于我们网站的网络公共 api 服务。如何限制只有我们的网站可以访问我们的api?

网站和 API 使用相同的域,因此 CORS 没有帮助。 API 由 NodeJS & Express 构建。

【问题讨论】:

  • 类似的问题可能会有所帮助:stackoverflow.com/questions/28136710/…
  • @petryuno1 我不这么认为。我们关心的是如何确保请求仅来自我们的网站 js,而不是本地的。

标签: api security public


【解决方案1】:

您可以使用称为 JWT-JSON Web 令牌的东西。当今用于验证 Web 服务的现代且最简单的工具。将 JWT 与 nodeJs 一起使用真的非常简单。

第 1 步:为节点安装 JWT。

npm install jwt

第 2 步:创建 JWT 令牌。示例

token = jwt.sign({
                 url:"www.abc.com", 
                 param2: value2,
                 param3: value3,
                 accesstoken: casjzhiy15t4e78y8bnvkds98u2e3098nc1bxu
        }, "HASHKEY");

在这里,参数可以是您希望添加到令牌中的任何内容,而 HASHKEY 应该是字符串值。而已。现在您可以复制生成的令牌,将相同的令牌传递给来自 Web 的 API 调用。

第 3 步:在 API 中验证令牌

var adminToken = req.headers.admintoken;
var decoded = jwt.verify(adminToken, 'HASHKEY');
if(decoded.PARAM1 == "VALUE1"){
  //Request is coming from an authenticated source
}

您可以参考官方 JWT 文档了解更多详细信息。

【讨论】:

  • token是node创建的还是js创建的?如果是节点,如何确保请求的域是正确的?据我所知,referer 标头很容易被欺骗。
猜你喜欢
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2021-01-21
  • 2021-07-05
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多