Я создал собственный API с использованием PHP (версия 7.0), в частности, фреймворк Laravel (версия 5.5.40), который использует пакет tymon / jwt-auth (версия 1.0.0-rc.2) для авторизации пользователя.Многие из функций моего контроллера используют эту строку для получения правильных учетных данных пользователя:
$user = JWTAuth::parseToken()->authenticate();
Я использую Postman для проверки моего API.
Когда я выполняю вызовы API в моей локальной среде, авторизацияпроходит нормально и возвращает ожидаемые данные.Когда я выполняю вызовы API для API моего живого сайта (размещенного на моем сервере apache), я получаю эту ошибку:
Не удалось проанализировать токен из запроса
Поскольку эта ошибка возникает только в моем действующем API, я предположил, что существует проблема с файлом .htaccess моего API (который, кстати, обычно распознается приложением, я провел некоторую отладку и проверил свой apache error_log, чтобы убедиться, что изменения в моемAPI .htaccess распознаются).Я попытался добавить эти строки (и различные варианты этих строк, так как во время исследования я столкнулся с несколькими предложениями):
RewriteEngine On
RewriteCond %{HTTP:Authorization} .+
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
, но ошибка все еще сохраняется.Я попытался добавить этот код:
var_dump($_SERVER);
до:
$user = JWTAuth::parseToken()->authenticate();
и заметил, что в моем действующем API эти элементы отсутствуют в массиве $ _SERVER: REDIRECT_HTTP_AUTHORIZATION, HTTP_AUTHORIZATION
Разве вышеприведенный код .htaccess не предназначен для их добавления вручную?
Это мои заголовки ответа, как в Chrome DevTools:
Access-Control-Allow-Origin: http: /example.gr
Cache-Control: без кэширования, частный
Соединение: закрыть
Кодировка содержимого: gzip
Тип содержимого: application / json
Дата: Вт, 14 мая 2019 г. 11:33:10 GMT
Сервер: Apache
Кодировка передачи: chunked
Варьируется: Источник, кодировка принятия
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
А это мои заголовки запросов (предварительная глава)Показано rs):
Примите: приложение / json, текст / обычный, /
Авторизация: предъявитель eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hcGkudjIucmVzY2FwZXIuaG9uZXN0cGFydG5lcnMuZ3JcL2FwaVwvYXV0aFwvbG9naW4iLCJpYXQiOjE1NTc4MzM1ODksImV4cCI6MTY0NDIzMzU4OSwibmJmIjoxNTU3ODMzNTg5LCJqdGkiOiJweDRjNDlOckFQbGMyM21OIiwic3ViIjo1LCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.YWPhPDeNrB4TI1gdhBYylrmIAs1-r1-K2M2eKyO89KY
1084 *
Origin: 1087 *
http://example.gr 1089 *
Referer: 1092 *http://example/summary 1094 *
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0;Win64;x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 74.0.3729.131 Safari / 537.36
РЕДАКТИРОВАТЬ: это конфигурация виртуального хоста производственного сервера для этого конкретного домена, как указано в файле httpd.conf:
<VirtualHost |example-ip|:80>
ServerName api.example.gr
ServerAlias www.api.example.gr
DocumentRoot /home/example/public_html/api/public
ServerAdmin webmaster@api.example.gr
UseCanonicalName Off
## User example # Needed for Cpanel::ApacheConf
<IfModule userdir_module>
<IfModule !mpm_itk.c>
<IfModule !ruid2_module>
<IfModule !mod_passenger.c>
UserDir enabled example
</IfModule>
</IfModule>
</IfModule>
</IfModule>
# Enable backwards compatible Server Side Include expression parser for Apache versions >= 2.4.
# To selectively use the newer Apache 2.4 expression parser, disable SSILegacyExprParser in
# the user's .htaccess file. For more information, please read:
# http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilegacyexprparser
<IfModule include_module>
<Directory "/home/example/public_html/api/public">
SSILegacyExprParser On
</Directory>
</IfModule>
<IfModule suphp_module>
suPHP_UserGroup example example
</IfModule>
<IfModule suexec_module>
<IfModule !mod_ruid2.c>
SuexecUserGroup example example
</IfModule>
</IfModule>
<IfModule ruid2_module>
RMode config
RUidGid example example
</IfModule>
<IfModule mpm_itk.c>
# For more information on MPM ITK, please read:
# http://mpm-itk.sesse.net/
AssignUserID example example
</IfModule>
<IfModule mod_passenger.c>
PassengerUser example
PassengerGroup example
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ /home/example/public_html/api/public/cgi-bin/
</IfModule>
# To customize this VirtualHost use an include file at the following location
# Include "/etc/apache2/conf.d/userdata/std/2_4/example/api.example.gr/*.conf"
</VirtualHost>
<VirtualHost 1|example-ip|:443>
ServerName api.example.gr
ServerAlias www.api.example.gr
DocumentRoot /home/example/public_html/api/public
ServerAdmin webmaster@api.example.gr
UseCanonicalName Off
## User example # Needed for Cpanel::ApacheConf
<IfModule userdir_module>
<IfModule !mpm_itk.c>
<IfModule !ruid2_module>
<IfModule !mod_passenger.c>
UserDir enabled example
</IfModule>
</IfModule>
</IfModule>
</IfModule>
# Enable backwards compatible Server Side Include expression parser for Apache versions >= 2.4.
# To selectively use the newer Apache 2.4 expression parser, disable SSILegacyExprParser in
# the user's .htaccess file. For more information, please read:
# http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilegacyexprparser
<IfModule mod_include.c>
<Directory "/home/example/public_html/api/public">
SSILegacyExprParser On
</Directory>
</IfModule>
<Proxymatch ^https?://127\.0\.0\.1:(2082|2083|2077|2078|2079|2080|2086|2087|2095|2096)/>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Proxymatch>
<IfModule mod_suphp.c>
suPHP_UserGroup example example
</IfModule>
<IfModule suexec_module>
<IfModule !mod_ruid2.c>
SuexecUserGroup example example
</IfModule>
</IfModule>
<IfModule ruid2_module>
RMode config
RUidGid example example
</IfModule>
<IfModule mpm_itk.c>
# For more information on MPM ITK, please read:
# http://mpm-itk.sesse.net/
AssignUserID example example
</IfModule>
<IfModule mod_passenger.c>
PassengerUser example
PassengerGroup example
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ /home/example/public_html/api/public/cgi-bin/
</IfModule>
<IfModule ssl_module>
SSLEngine on
SSLCertificateFile /var/cpanel/ssl/apache_tls/api.example.gr/combined
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
<Directory "/home/example/public_html/api/public/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</IfModule>
# To customize this VirtualHost use an include file at the following location
# Include "/etc/apache2/conf.d/userdata/ssl/2_4/example/api.example.gr/*.conf"
</VirtualHost>
Следует отметить, что ip и домен моего фактического API были заменены примерами:
front url: http://example.gr
URL-адрес API: http://api.example.gr