Я создаю систему авторизации в PHP
, и я наткнулся на эту схему передачи меток JWT, я читал RFC 6750 . У меня есть следующие сомнения:
Authorization: Bearer fdbghfbfgbjhg_something
, как сервер должен справиться с этим, decodeFunc(explode(" ", $this->getRequest()->getHeader("Authorization"))[1])
? 1.Улучшение безопасности, потому что если токен не отправляется в заголовке, отправленном в URL-адресе, он будет регистрироваться в сети, в журнале сервера ….
2. Хорошая функция для получения жетонов-носителей
/** * Get hearder Authorization * */ function getAuthorizationHeader(){ $headers = null; if (isset($_SERVER['Authorization'])) { $headers = trim($_SERVER["Authorization"]); } else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI $headers = trim($_SERVER["HTTP_AUTHORIZATION"]); } elseif (function_exists('apache_request_headers')) { $requestHeaders = apache_request_headers(); // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization) $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders)); //print_r($requestHeaders); if (isset($requestHeaders['Authorization'])) { $headers = trim($requestHeaders['Authorization']); } } return $headers; } /** * get access token from header * */ function getBearerToken() { $headers = $this->getAuthorizationHeader(); // HEADER: Get the access token from the header if (!empty($headers)) { if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) { return $matches[1]; } } return null; }
Я бы рекомендовал использовать следующий RegEx для проверки, если это действительный jwt-токен:
/Bearer\s((.*)\.(.*)\.(.*))/
и получить доступ к нему также со спичками [1].
Это структура JWT-токена, см. https://jwt.io/