【问题标题】:Consume Your own API - Unauthorized使用您自己的 API - 未经授权
【发布时间】:2018-06-26 11:44:21
【问题描述】:

我已经进行了一些谷歌搜索并检查了this answer,但当我从我的 laravel 应用程序中使用我自己的 api 从未登录的用户处使用我自己的 api 时,我仍然面临 401 Unauthorized 响应。

我已经按照官方文档安装了护照。

我对每个 axios 请求也有这个:

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

令牌也在我的样板文件中定义:

<meta name="csrf-token" content="{{ csrf_token() }}">

为什么这些请求仍然未经授权?

【问题讨论】:

  • 老实说,我会让 Postman 尝试弄清楚为什么你不能使用你的 api。它真的是我偶然发现的最好的工具之一。
  • 嗯,好像我必须是登录用户,当我登录时一切正常 - 我的 API 如何被非登录用户使用,即。获取所有新闻帖子?
  • 根据您的评论,我怀疑您的请求最终会出现在网络路由而不是 api 路由上!有没有设置axios的headersAccept:application/jsonContent-Type: application/json
  • 并添加您尝试访问的端点(axios 和后端)以及控制器方法。
  • 端点在那儿,怎么设置axios header这样?

标签: laravel laravel-5 laravel-5.5


【解决方案1】:

如果您的 api 路由封装在 auth:api 中间件中,关键字是 auth,那么除非您的用户没有首先登录,否则您正在做的事情将是不可能的。

您可以删除身份验证并仅使用 api 中间件,但这不会保护此端点免受跨站点/未经授权的请求。

一种解决方案可能是创建一个client credentials grant token 并将其发送到您的前端,尽管您必须将其存储在某个地方。

就个人而言,因为它是您自己的 api,所以我只需在其自己的文件中创建一个路由或路由组,并将 require 这个文件添加到您的 webapi 路由文件中。因此,您将能够通过 csrf 保护从您自己的 Web 应用程序中使用它,如果您尝试在其他地方访问它,则需要在 URL https://website.com/api 中添加 api 和访问令牌。

【讨论】:

  • 你在@Luke Vincent 那里提出了一个重要的观点,使用“auth”中间件首先需要登录。用户甚至在进行“api”检查之前。我建议 auth:api 应该从 api 数组下的 Http/Kernel.php 文件中删除,只添加到 route/api.php 文件到需要经过身份验证的用户的路由
【解决方案2】:

好吧,不要对不需要经过身份验证的用户的路由使用“auth:api”,为什么?你注意到关键字 AUTH === 在 'auth:api" 中间件上进行了身份验证吗?这意味着它需要一个经过身份验证的用户,或者在进行 api 检查之前先检查身份验证。

那该怎么办?

如果您碰巧让每个请求都应该在“auth:api”中间件下检查 Http/Kernel.php 文件,如下所示

'api' => [
        'throttle:60,1',
        'bindings',
        'auth:api'
    ],

只需将其删除并在 routes/api.php 文件中添加此中间件,该文件仅需要经过身份验证的用户,如下所示

  Route::post('/comments', CommentsController@post')->middleware('auth:api');

那就让不需要认证用户的路由变成这样

  Route::get('/comments', 'CommentsController@index);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2013-08-22
    • 2019-03-07
    相关资源
    最近更新 更多