使用 Laravel 5、CORS 和 JWTAuth 读取 JWT 令牌的授权 header

Reading Authorization header for JWT Token using Laravel 5, CORS, and JWTAuth

我真的很难弄明白这一点。我在我的 Laravel 5 API 上使用 JWTAuth,我在读取令牌时遇到问题。这是我所知道并尝试过的:

我已将我的 CORS 配置设置为允许所有 headers 用于我的 API 路径:

    return array(
    'defaults' => array(
        'supportsCredentials' => false,
        'allowedOrigins' => array(),
        'allowedHeaders' => array(),
        'allowedMethods' => array(),
        'exposedHeaders' => array(),
        'maxAge' => 0,
        'hosts' => array(),
    ),

    'paths' => array(
        'api/*' => array(
            'allowedOrigins' => array('*'),
            'allowedHeaders' => array('*'),
            'allowedMethods' => array('*'),
            'maxAge' => 3600,
        ),
        '*' => array(
            'allowedOrigins' => array('*'),
            'allowedHeaders' => array('Content-Type'),
            'allowedMethods' => array('POST', 'PUT', 'GET', 'DELETE'),
            'maxAge' => 3600,
            'hosts' => array('api.*'),
        ),
    ),

);

我已将以下内容添加到启用了 apache 的站点的 conf 文件中:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

而且我可以在 Chrome 工具中看到 headers 正在使用正确的令牌以正确的格式传回:授权:Bearer tokenstring

谁能看出我做错了什么?有人知道这方面的问题吗?

我知道我的问题出在哪里了。根据 JWTAuth Github page 上的文档:

Note to Apache users

Apache seems to discard the Authorization header if it is not a base64 encoded user/pass combo. So to fix this you can add the following to your apache config

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

我认为 apache 配置意味着 000-default.conf 文件。我错了。事实上,这应该在 .htaccess 文件中完成。完成后...POOF,一切正常!

在我的 AWS 服务器 EC2 中,我必须编辑 /etc/apache2/apache2.conf 文件并在最底部粘贴:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=

然后在我的 .htaccess

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

这按预期工作。