fup*_*uzo 3 javascript api node.js cors express
我想用 CORS 保护我的 API。我希望我的 API 只能从选定的域进行调用访问。
我正在使用 node.js 和 express,所以我添加到我的项目中: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.'})
})
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过 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 });
});
Run Code Online (Sandbox Code Playgroud)
但这也让我对邮递员的要求...
我想要一个 API,只有当它涉及到我的 example.com 页面并且来自 JavaScript 发送的请求时才能被引用。
COR 仅适用于浏览器,因此它不会对在浏览器外部(如 Postman)发出的请求产生任何影响。它是一种需要客户端自己实现 COR 保护的技术。
除非您实施某种身份验证或基于时间的令牌,否则无法阻止 POSTMAN 或任何其他编程访问使用您的 API。这是基于 Web 的 API 的本质。如果它们可以在您的网页中使用,那么其他任何人也可以以编程方式使用它们。
COR 的目的是防止其他网页从他们自己的网页 Javascript 中使用您的 API。这就是它保护的全部。事实上,如果另一个网站想要从他们的服务器访问您的 API,然后将结果放入他们自己的网页中,他们可以这样做 - COR 根本不限制服务器或浏览器之外的程序访问。
有关保护 API 的一般主题的进一步讨论,请参阅以下参考资料:
如何发布访问 REST api 的 jQuery 代码,但防止未经授权的使用
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |