2014-04-25 1 views
0

Я разрабатываю приложение SPA на AngularJS, которое получает данные от REST Api, написанные на PHP. Мне нужно реализовать авторизацию JWT. Я получил простую библиотеку PHP JWT, которая может кодировать и декодировать токены JWT, но не знаю, как проверить токен JWT. Может ли кто-нибудь объяснить мне шаги проверки JWT на стороне PHP?Одиночная заявка на использование приложений

ответ

0

Вы должны декодировать заголовок первого это будет содержать алгоритм, используемый для подписи как (который является первой частью 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.