如何限制我的rest api仅由带有node.js的引用URL使用?

时间:2017-08-09 09:23:11

标签: javascript node.js rest express curl

我在nodejs中有一个rest api,并且只限制来自特定URL的访问?

我的node.js代码:

 String content = new String(Files.readAllBytes(Paths.get("..\\myFolder\\Tests\\test.json")));
 String xml = XML.toString(new JSONObject(content));

审议
1)我可以获取请求的ip(req.ip或requestIp.getClientIp(req)),它很好并且工作正常!
2)我可以阅读请求的来源(req.get(' origin')),它很好并且工作正常!但我发现了一个问题。

问题
我发现使用POSTMAN(https://www.getpostman.com/)或者在我的mac控制台中使用curl,我可以强制使用" Origin"在html请求标头中。例如:

var express=require("express");
var app=express();
var auth = require('basic-auth');

appStart.use(function(req, res, next) {

    console.log(req.get('origin'));
    console.log(requestIp.getClientIp(req));
    console.log(req.ip);

    //check the api key username e password
    var authentication=auth(req);
    if(authentication.name!="apiTokenUsername" || authentication.pass!="apiTokenPassword") res.status(400).send("Api key Username or password incorrect!");

    //check if the ip of request is authorized
    if(req.ip=="xxx.xxx.xxx.xxx") return next();

    //check if the origin of request is authorized
    if(req.get('origin') == "www.acceptedUrl.com") return next();

    //if ip isn't "xxx.xxx.xxx.xxx" or origin isn't "www.acceptedUrl.com"
    res.status(400).send("You are not authorized!");
});

app.get("*",function(req,res){
    res.send("Hello world!);
});

所以在我的node.js代码中我发现:

curl -X GET https://myGateway -H 'origin: www.acceptedUrl.com'

问题
有另一种安全的方式来获取请求的来源吗?

0 个答案:

没有答案