HTTPS не может авторизоваться с помощью JWT. В запросе отсутствует заголовок авторизации - PullRequest
1 голос
/ 25 октября 2019

У меня есть сервер API, основанный на фреймворке Yii2. Он использует аутентификацию с помощью веб-токена JSON. Он отлично работает, когда я использую http, есть заголовок авторизации. Чтобы проверить, присутствует ли заголовок, я создал метод теста, который возвращает токен.

public function actionTest(){
    return Yii::$app->request->getHeaders()->get('Authorization');
}

Когда я делаю запрос (от Почтальона) через http, результат будет следующим:

* * 1006 "Знаменосец eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvc29mdG1hZXN0cmkuY29tIiwiaWF0IjoxNTcxOTg0NjMzLCJleHAiOjE1NzI1ODk0MzMsInVpZCI6MTAwLCJuYmYiOjE1NzE5ODQ2MzMsImRhdGEiOnsidXNlciI6eyJpZCI6IjEiLCJwYXNzX2hhc2giOiIkUCRCdUtCTmNuUkxRWDdBSFFVMThrQ1ZRYjQxUXZicGIwIn19fQ.zbGk8blRIVRz6h4RLwT7wavH1jFv1cajlKwXYuzAZDE" 1008

Но как только я сделать то же самое через HTTPS, он возвращает нуль. У меня также есть файл .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?

1 Ответ

1 голос
/ 25 октября 2019

Я только что решил проблему, изменив

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

на

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

Я понимаю, что вторая версия устанавливает переменную среды, а первая - нет, но я понятия не имею, почему первая версия не работала с https, но работала с http. Поэтому я был бы признателен, если бы кто-то мог объяснить мне

...