我想使用CORS保护我的API。我希望我的API仅具有来自所选域的呼叫访问权限。
我正在使用node.js进行表达,因此我将其添加到我的项目中:https://github.com/expressjs/cors
和示例代码:
var express = require('express')
var cors = require('cors')
var app = express()
var corsOptions = {
origin: 'http://example.com',
optionsSuccessStatus: 200
}
app.get('/test', cors(corsOptions), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for only example.com.'})
})
但是,如果我通过POSTMAN从本地主机发出请求,我仍然会从该路由中获得响应。应该将其阻止,并且仅适用于来自一个域(example.com)的请求。
我之前尝试过:
router.get('/test', cors(corsOptions), function(req, res, next) {
console.log(corsOptions);
res.header("Access-Control-Allow-Origin", "http://www.example.com);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.status(200).send({ work: true });
});
但这也使我从POSTMAN发出的请求...
我希望有一个仅在我的example.com页面上并且有JavaScript发送的请求时才能引用的API。
答案 0 :(得分:2)
CORs仅在浏览器中有效,因此不会对来自Postman的浏览器外部的请求产生任何影响。这是一项需要客户端自己实施CORs保护的技术。
除非实现了某种身份验证或基于时间的令牌,否则无法阻止POSTMAN或任何其他程序访问使用您的API。这是基于Web的API的本质。如果可以在您的网页中使用它们,那么其他任何人也可以通过编程方式使用它们。
COR的目的是防止其他网页使用其自己的网页Javascript中的API。这就是它所保护的全部。实际上,如果另一个网站希望从其服务器访问您的API,然后将结果放入自己的网页中,则他们可以做到这一点-COR完全不限制浏览器外部的服务器或编程访问。
有关保护API常规主题的进一步讨论,请参见以下参考文献:
How to publish jQuery code accessing a REST api, but have it secured from unauthorized use