好的,atm我有一个用Nuxt构建的前端应用程序,它使用Axios来执行对REST的请求(单独)。
如果用户在网站上进行搜索,API在XMLHttprequests中是可见的,因此每个人都可以使用该API,如果他们愿意的话。
什么是最好的方式,使它使只有用户通过我的网站搜索获得访问API和人,只是直接到网址被拒绝。我想使用某种令牌系统,但是最好的方法是什么呢?杰沃特?(用户从不登录,因此没有“身份验证”)
谢谢!
发布于 2017-12-15 23:45:05
发布于 2018-02-14 13:05:58
我在同一个“船”中,我现在的设置实际上是在VueJs中,但在进入StackOverflow之前,我开发了一种方法,即前端调用服务器,然后服务器调用API,因此在浏览器中,您将只看到对服务器层的调用,唯一的限制是调用必须来自同一个主机名。
后端由高速公路处理,前端使用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 ()登录用户,我总是有一个由OAuth2成功重定向提供的用户id,并且这个用户id在一个头中被传递给API,还有API.在服务器中,我检查用户I权限,允许或不允许执行该操作。
但就连我也在试图找到更好的。我见过几个使用后端调用的javascript前端应用程序,但它们使用Bearer
标记。
作为一个好奇的用户,您会看到所有API的路径以及它们是如何组成的,但在我的例子中,您只看到对forward后端的调用,只有在这里我才转发到真正的API.我不知道这是否只是“更多的工作”,但似乎有点“安全”来解决问题的方式。
https://stackoverflow.com/questions/47841937
复制