首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >处理前端API调用的最佳方法

处理前端API调用的最佳方法
EN

Stack Overflow用户
提问于 2017-12-16 02:12:14
回答 2查看 4.3K关注 0票数 2

好的,atm我有一个用Nuxt构建的前端应用程序,它使用Axios来执行对REST的请求(单独)。

如果用户在网站上进行搜索,API在XMLHttprequests中是可见的,因此每个人都可以使用该API,如果他们愿意的话。

什么是最好的方式,使它使只有用户通过我的网站搜索获得访问API和人,只是直接到网址被拒绝。我想使用某种令牌系统,但是最好的方法是什么呢?杰沃特?(用户从不登录,因此没有“身份验证”)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-16 07:45:05

  1. 海事组织,您不能阻止其他非法客户端访问您的后端,因为您描述官方客户端和其他非法客户端对您的后端具有相同的知识
  2. 但是,通过一些方法,例如POST all requests header中的特殊密钥、在header中更改的30分钟令牌以及客户机IP控制的服务器端API,非法客户端访问后端会变得更加困难。
  3. 如果搜索API的安全性非常重要,那么通过登录来验证它;如果不是,就让它去吧,因为它不在您的关键路径中。让我们专注于其他重要的事情。
票数 2
EN

Stack Overflow用户

发布于 2018-02-14 21:05:58

我在同一个“船”中,我现在的设置实际上是在VueJs中,但在进入StackOverflow之前,我开发了一种方法,即前端调用服务器,然后服务器调用API,因此在浏览器中,您将只看到对服务器层的调用,唯一的限制是调用必须来自同一个主机名。

后端由高速公路处理,前端使用VueJs处理。

代码语言:javascript
代码运行次数:0
运行
复制
// 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.我不知道这是否只是“更多的工作”,但似乎有点“安全”来解决问题的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47841937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档