Я разрабатываю приложение SPA на AngularJS, которое получает данные от REST Api, написанные на PHP. Мне нужно реализовать авторизацию JWT. Я получил простую библиотеку PHP JWT, которая может кодировать и декодировать токены JWT, но не знаю, как проверить токен JWT. Может ли кто-нибудь объяснить мне шаги проверки JWT на стороне PHP?Одиночная заявка на использование приложений
ответ
Вы должны декодировать заголовок первого это будет содержать алгоритм, используемый для подписи как (который является первой частью JWT после того, как вы разделяете периоды «»):
{
"alg": "HS256",
"cty": "JWT"
}
Это означает, что HMAC с SHA-256 был использован для создания подписи этого токена. HMAC - это MAC, сгенерированный путем конкатенации секретного на сообщение и вычисление хеша, в этом случае хеш-функция является SHA-256. Поскольку, учитывая HASH, невозможно (или, по крайней мере, очень дорого в аппаратных терминах) вычислять входные данные, даже зная, какое сообщение вы не можете угадать. Но, учитывая сообщение (вторая часть JWT) и ключ, вы можете снова вычислить хэш и проверить, равна ли это сигнатуре (третья часть JWT). В этом ответе есть дополнительная информация о HMAC 1.
Само собой разумеется, что, хотя это очень распространенный алгоритм для JWT, является не единственным, и, следовательно, заголовком для указания алгоритма. Например, JWT Google подписываются с асимметричным секретом, т. Е. Публикуют публичную часть ключа, которая может использоваться для проверки подписей, но не может использоваться для подписи. Этот алгоритм RS256 (a.k.a. RSA SHA-256).
Вы найдете этот сайт действительно полезным для отладки 2. Вы также можете увидеть здесь различные алгоритмы и набор различных реализаций на многих языках.
Ребята из Firebase имеют реализацию PHP, которая может подписывать и проверять JWT 3.