【问题标题】:A way to make Laravel API private or restricted一种使 Laravel API 私有或受限的方法
【发布时间】:2020-10-04 02:03:04
【问题描述】:

我现在正在使用 Laravel 和 Vue.js 进行开发。 Vue 文件包含在 Laravel 中,没有分开。问题是我设置通过回答 API 调用将数据发送到前端(vue)。 我最近将我的应用程序部署到 VPS,现在任何人都可以使用 curl 命令向 API 发送 GET/POST 请求... 请让我知道如何将 API 设为私有/受限?我希望它只能由 Vue 访问。仅供参考,我使用 JWT-auth 作为登录系统。

【问题讨论】:

  • 你不能以任何方式限制谁或什么可以发送到你的端点......你只能验证传入的请求,所以在响应它们之前确保你正在验证请求
  • 非常感谢您的评论!关于请求的验证,也许我可以使用中间件进行验证? JWT 存储在本地存储中,所以我想如果发送 API 请求的人在存储中没有令牌,我可以设置拒绝请求的中间件..?
  • 这是一个好的开始......只要确保人们通过身份验证之类的事情,你就不能阻止他们通过他们想要的任何 http 客户端发送请求,但你至少可以限制你如何响应请求
  • “你不能阻止他们通过他们想要的任何 http 客户端发送请求,但你至少可以限制你对请求的响应方式”——事情对我来说越来越清楚了。谢谢lagbox先生! (>_
  • 身份验证是一个好的开始。 Laravel 可以在响应之前确保传入的请求来自已知用户。另一种选择是,如果这不是公共 API,并且您不希望任何端点响应外部请求,那么您可以将 NGINX 或 Apache 配置设置为仅允许来自同一网络的请求。这将在外部请求到达 Laravel 之前停止它们。如果您的虚拟主机有您可以使用的防火墙策略,那可能是您可以采取的另一条路线。

标签: laravel vue.js


【解决方案1】:

您需要在每个请求中传递令牌,并且在 api.php 文件中您可以通过 api 中间件保护路由。我向您推荐这一系列教程:https://blog.peterplucinski.com/setting-up-jwt-authentication-with-laravel-and-vue-part-1/

如何保护路线

  Route::group([
          'middleware' => 'api',
          'prefix' => 'posts'
         ],
          function ($router) {
            Route::post('/', 'PostController@index');
         });

Another option:
Route::middleware('auth:api')->get('/posts','PostController@index');

如何在请求中传递令牌

      axios.get('/api/posts', {
                    headers: {
                        Authorization: 'Bearer ' + localStorage.getItem('token')
                    }
                })
                .then(response => {
                    this.data = response.data
                }).catch(error => {

                })

【讨论】:

  • 非常感谢您的回答!添加标题信息的想法对我很有帮助。我最近将我的 webapp 部署到了 VPS,现在是暂存环境。在生产环境中我只需要一次登录(jwt-auth),但由于现在是登台,我还设置了基本身份验证以暂时加强安全性。问题是,当我使用 chrome devtool 检查标头信息时,基本身份验证使用属性“授权”,而不是 jwt-auth ....我希望该属性类似于“承载 XXX ...”。请告诉我是否可以用 jwt 替换它?
猜你喜欢
  • 2012-12-29
  • 1970-01-01
  • 2014-10-07
  • 2019-01-21
  • 1970-01-01
  • 2011-07-09
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多