使用 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}]
这按预期工作。
我真的很难弄明白这一点。我在我的 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}]
这按预期工作。