使用Laravel 5,CORS和JWTAuth读取JWT令牌的授权头

时间:2015-07-01 21:09:08

标签: laravel-5 cors jwt

我很难搞清楚这一点。我在Laravel 5 API上使用JWTAuth并且我在读取令牌时遇到问题。这就是我所知道并尝试过的:

我已将我的CORS配置设置为允许我的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的网站启用的配置文件中:

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

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

任何人都可以看到我可能做错了吗?有谁知道这个问题?

2 个答案:

答案 0 :(得分:2)

我知道我的问题在哪里。根据{{​​3}}上的文档:

  

Apache用户注意

     如果Apache不是base64,Apache似乎会丢弃Authorization标头   编码用户/传递组合。所以要解决此问题,您可以添加以下内容   你的apache配置

var groupedModel = Model.Select((e, i) => new { Element = e, Index = i })
                        .GroupBy(e => (e.Index - 1) / 6)
                        .Select(g => g.Select(e => e.Element));

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

答案 1 :(得分:0)

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

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

然后在我的 .htaccess

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

这按预期工作。