javascript – 节点JS:只允许服务器端调用我的api

前端之家收集整理的这篇文章主要介绍了javascript – 节点JS:只允许服务器端调用我的api前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直绞尽脑汁寻求一个简单的解决方案.
可以说,我的Node JS应用程序中有10个API端点.

我已经允许其中3个公开,其余4个具有基于JWT的身份验证

现在我还有3个路由,它们没有JWT,我只需要允许服务器端调用.没有浏览器或卷发或邮递员,应该能够打电话给他们.如何从请求对象中识别出它来自服务器?

或者换句话说,如何拒绝所有对我的api的跨源调用?由于服务器端不属于CORS,因此它们应该过滤掉

解决方法

您可以使用 express-ipfilter软件包,仅将其应用于您要保护的特定路由:
const express = require('express'),ipfilter = require('express-ipfilter').IpFilter;

// Whitelist the following IPs
const ips = ['127.0.0.1'];

// Create the route
app.get("/securePath",ipfilter(ips,{mode: 'allow'}),(req,res) => {
  // only requests from 127.0.0.1 (localhost/loopback) can get here
});

app.get("/openPath",res) => {
  // all requests can get here
});

app.listen(3000);

如果在代理后面使用Node,则可能需要配置代理以使用实际IP设置标头,然后将ipfilter函数的detectIp属性中的函数传递给第二个参数.

假设您正在使用Nginx并将其配置为通过x-Real-IP标头发送原始IP,您可以将此函数传递给ipfilter:

const express = require('express'),ipfilter = require('express-ipfilter').IpFilter,ips = ['127.0.0.1'];

app.get("/securePath",{mode: 'allow',detectIp: getIp}),res) => {
  // only requests from 127.0.0.1 (localhost/loopback) that go through the proxy can get here.
});

app.get("/openPath",res) => {
  // all requests can get here
});

app.listen(3000);

function getIp(req) { return req.headers["X-Real-IP"] }

猜你在找的JavaScript相关文章