授权标头未到达 laravel 项目中的服务器

Posted

技术标签:

【中文标题】授权标头未到达 laravel 项目中的服务器【英文标题】:Authorization header not reaching the server in laravel project 【发布时间】:2018-09-12 14:04:27 【问题描述】:

我正在使用 JWT 令牌来授权 android 用户,但是当我将它发送为 null 时,服务器是否删除了 Authorization 标头?是否需要更改配置以允许我的标头传递到后端?

【问题讨论】:

如何发送标头? 【参考方案1】:

只是为谷歌人更新,因为我也在寻找解决方案,觉得修改核心代码不是一个好主意!

我的解决方案是使用中间件。在我的 javascript 中,我设置了 X-Authorization 标头而不是 Authorization

然后我创建了一个 HTTP 中间件类来获取这个标头并设置我们的授权标头 -

<?php

namespace App\Http\Middleware;

use Closure;

class XAuthorizationHeader

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next) 

        // check if we have an X-Authorization header present
        if($auth = $request->header('X-Authorization')) 
            $request->headers->set('Authorization', $auth);
        

        return $next($request);
    

然后在App\Http\Kernel.php$middleware数组中,一开始就添加这个中间件。

protected $middleware = [ XAuthorizationHeader::class,

然后,任何进一步的代码都可以检索 Authorization 标头,就像当您将它作为 X-Authorization 标头传递时它实际存在一样。

【讨论】:

@theinquisitor 这应该是公认的答案,无论如何编辑框架都不应该是答案。 除了用户标记之外,还有什么方法可以改变接受的答案?我同意不应该向搜索此解决方案的人提供有关修改核心代码的内容! 不知道,我只是标记答案以引起任何版主的注意。 在 laravel 8 上仍然存在同样的问题【参考方案2】:

在public/.htaccess中添加授权处理代码:

# Handle Authorization Header RewriteCond %HTTP:Authorization . RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]

参考:https://github.com/laravel/laravel/blob/master/public/.htaccess

【讨论】:

【参考方案3】:

遵循第二个解决方案。

我在 cPanel 托管中遇到了这个问题,一些安全模块或插件从标题中删除了授权数据,我使用的是 Authorization Bearer。我通过重命名 Authorization -> ApiToken 并在 Laravel 核心中更新几行代码来绕过它。

文件vendor\laravel\framework\src\Illuminate\Http\Concerns\InteractsWithInput.php方法bearerToken

public function bearerToken()

    $header = $this->header('Authorization', $this->header('ApiToken', ''));

    if (Str::startsWith($header, 'Bearer ')) 
        return Str::substr($header, 7);
    

顺便说一句,编辑核心代码并不理想。

【讨论】:

以上是关于授权标头未到达 laravel 项目中的服务器的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Auth0 未授权用户

RestSharp - 授权标头未涉及 WCF REST 服务

simple-auth-token JWT 授权未设置授权标头

授权标头未通过 Codeception API 测试

从 Lumen 获得授权,从 Laravel 获得标头

Vue-Resource Authorization 标头无法设置