我有一个基于Yii2框架的API服务器。它通过JSON Web令牌使用身份验证。当我使用http时,它工作正常,提供了Authorization标头。为了检查标题是否存在,我做了一个返回令牌的测试方法。
public function actionTest(){
return Yii::$app->request->getHeaders()->get('Authorization');
}
当我通过http(邮递员)发出请求时,结果如下
“承载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一起使用。因此,如果有人可以向我解释,我将不胜感激
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句