authentication - HTTPS 无法通过 JWT 进行授权。请求中不存在授权标头
问题描述
我有一个基于 Yii2 框架的 API 服务器。它通过 JSON Web 令牌使用身份验证。当我使用 http 时它工作正常,提供了一个 Authorization 标头。为了检查标头是否存在,我创建了一个返回令牌的测试方法。
public function actionTest(){
return Yii::$app->request->getHeaders()->get('Authorization');
}
当我通过 http 发出请求(来自 Postman)时,结果如下
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvc29mdG1hZXN0cmkuY29tIiwiaWF0IjoxNTcxOTg0NjMzLCJleHAiOjE1NzI1ODk0MzMsInVpZCI6MTAwLCJuYmYiOjE1NzE5ODQ2MzMsImRhdGEiOnsidXNlciI6eyJpZCI6IjEiLCJwYXNzX2hhc2giOiIkUCRCdUtCTmNuUkxRWDdBSFFVMThrQ1ZRYjQxUXZicGIwIn19fQ.zbGk8blRIVRz6h4RLwT7wavH1jFv1cajlKwXYuzAZDE"
但是一旦我在 https 上做同样的事情,它就会返回 null。我还有一个包含以下内容的 .htaccess 文件
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
不需要身份验证的 API 路由在 https 上工作得很好,所以这绝对不是证书问题或相关问题。
我在这里想念什么?也许必须在 htaccess 文件中添加其他内容?
解决方案
我刚刚通过改变这个解决了这个问题
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
对此
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
我知道第二个版本设置了一个环境变量,而第一个没有,但我不知道为什么第一个版本不能与 https 一起使用,而是与 http 一起使用。因此,如果有人可以向我解释,我将不胜感激
推荐阅读
- python - 使用python正则表达式从文件中的编号列表中获取内容
- android - 如何添加具有图像背景和阴影的多行编辑文本
- css - 为什么 * 选择器在 css 中不起作用?
- django - 在 Microsoft Azure 中生产后,Django 静态文件出现 404 错误
- python - 并发期货网页抓取
- java - 使用 FTDI ft311 开发板进行编程
- node.js - 我需要在我的 NodeJS 服务器上运行 MATLAB 代码
- ubuntu - H2O 的 Driverless AI .deb 包安装失败
- spring - 如何在 Spring MongoDB 中将 2 个整数值连接成一个字符串
- php - Laravel - 覆盖模型 ID