首页 > 解决方案 > 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 文件中添加其他内容?

标签: authenticationyii2http-headersjwt

解决方案


我刚刚通过改变这个解决了这个问题

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

对此

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

我知道第二个版本设置了一个环境变量,而第一个没有,但我不知道为什么第一个版本不能与 https 一起使用,而是与 http 一起使用。因此,如果有人可以向我解释,我将不胜感激


推荐阅读