JWT Не удалось проанализировать токен из запроса только на действующем сайте. - PullRequest
0 голосов
/ 14 мая 2019

Я создал собственный 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

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

проблема окончательно решена!Это была проблема с разрешениями.Я по умолчанию установил 755 для папок и 644 для файлов, и появились заголовки HTTP_AUTHORIZATION.

0 голосов
/ 14 мая 2019

Кажется, apache удаляет заголовок авторизации.Поэтому попробуйте это

от

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

до

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

Выражение регулярного выражения немного отличается.Эта конфигурация является прямым копированием / вставкой из файла .htaccess по умолчанию из symfony / apache-pack, который вы можете найти здесь symfony / apache-pack

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...