我一直绞尽脑汁寻求一个简单的解决方案.
可以说,我的Node JS应用程序中有10个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"] }