好的,所以我有一个使用Nuxt JS构建的前端应用程序,使用Axios向我的REST API发出请求(单独)。
如果用户在网站上进行搜索,则API URL在XMLHttprequests中可见,因此每个人都可以根据需要使用API。
制作它的最佳方式是什么,以便只有通过我的网站搜索的用户才能访问API,而直接访问该网址的用户将被拒绝。我想使用某种令牌系统,但最好的方法是什么?智威汤逊? (用户从不登录,因此没有“身份验证”)
谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
我和#34;船#34;我当前的设置实际上是在VueJs中,但在进入StackOverflow之前我开发了一种方法实际上,前端调用服务器然后服务器调用API,所以在浏览器中,你只会看到对服务器层的调用,唯一的限制是调用必须来自相同的主机名。
backend由expressJs和前端与VueJs
一起处理// protect /api calls to only be originated from 'process.env.API_ALLOW_HOST'
app.use(api.allowOnlySameDomainRequests());
...
const allowHostname = process.env.API_ALLOW_HOST ||'localhost';
exports.api = {
...
allowOnlySameDomainRequests: (req, res, next) => {
if(req.url.startsWith('/api') && req.hostname === allowHostname) {
// an /api call, only if request is the same
return next();
} else if (!req.url.startsWith('/api')) {
// not an /api call
return next();
}
return res.redirect('/error?code=401');
},
...
};
在我们的案例中,我们使用Oauth2(Google通过passportJs签名)登录用户,我总是拥有OAuth2成功重定向给出的用户ID,并且该用户ID一起传递到API中的API使用apikey ...在服务器中我检查了该用户标识权限,我允许或不允许执行该操作。
但即使我试图找到更好的东西。我看过几个使用后端调用的javascript前端应用,但他们使用Bearer
令牌。
作为一个好奇的用户,您会看到所有API的路径以及它们的组成方式,但在我的情况下,您只能看到对expressJs后端的调用,只有在那里我转发到真正的API ...我不知道这是否只是更多的工作",但似乎更多"安全"以这种方式解决问题。