Laravel 护照授权错误

Posted

技术标签:

【中文标题】Laravel 护照授权错误【英文标题】:Laravel Passport Authroziation error 【发布时间】:2018-09-26 10:11:31 【问题描述】:

我有一个适用于 Laravel 和 VueJs 的应用程序。我也有一个 VK 机器人。 Bot 和 Vue 使用相同的 API 路由。

对于机器人,我使用带有下一个标头的 oauth 访问令牌

Accept : application/json, Authorization: Bearer my_token_code

机器人运行良好。

对于 VueJ,我使用 X-CSRF-TOKEN。当我尝试从 vue 发送请求时出现错误

未经身份验证。

我的路线

Route::middleware('auth:api')->group(function()

    Route::get('/prepare/', 'CompgenApiController@prepareDefault');

    Route::post('/replace/', 'CompgenApiController@replaceImage');

    Route::get('/replaceall/', 'CompgenApiController@replaceAllImages');

    Route::get('/collage/', 'CompgenApiController@collage'); //@todo replace to POST

    Route::get('/generate/', 'CompgenApiController@generate');

    Route::post('/upload/', 'CompgenApiController@userUpload');

    Route::post('/reupload/', 'CompgenApiController@moderationReupload');

    Route::post('/feedback/', 'CompgenApiController@feedback');

);

我的应用程序/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class
    ],

    'api' => [
        'throttle:1000,1',
        'bindings',
    ],
];

我的 app.js

window.axios.defaults.headers.common = 
    'X-Requested-With': 'XMLHttpRequest',
    'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
;

【问题讨论】:

CSRF 令牌不是访问令牌,它用于缓解Cross Site Request Forgery。 好的,我该如何解决我的问题? 您需要在 axios 请求中发送一个授权令牌,就像您使用机器人一样。向 axios 添加请求拦截器,并将令牌附加到每个出站请求。 这里是来自documentation的拦截器示例 是的,但在这种情况下,我将在请求标头中发送身份验证令牌。一些入侵者将能够通过这些信息破解我的应用程序 【参考方案1】:

您是否将您的 api 保护提供程序更改为“护照”?在 config/auth.php 上

【讨论】:

我明白了,(对不起,我的意思是司机)。当您使用 js 或 vue 使用自己的 API 时,不应发送任何 Authorization Header\Laravel\Passport\Http\Middleware\CreateFreshApiToken 中间件会在每个经过身份验证的用户的请求上发送一个名为 laravel_token 的 cookie。 但我已经添加了 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class

以上是关于Laravel 护照授权错误的主要内容,如果未能解决你的问题,请参考以下文章

在内部生成 laravel 护照令牌。 401错误未经授权

用户未经授权时的 Laravel 护照自定义错误消息和状态码

Laravel 护照授权令牌在生成新令牌时过期

Laravel 护照 oauth 路线总是返回 401 未经授权

在 Laravel 护照、vueJS 和 Axios 中获得未经授权的 401

资源所有者或授权服务器拒绝了该请求。 laravel 护照