Я пытаюсь отправить Auth0 JWT с моего клиента на мой сервер и проверить токен. Я отправляю token_id, возвращенный из аутентификации auth0, на мой сервер через заголовки AuthHttp, и я могу получить его без проблем в PHP.
Коротко и просто:
У меня есть секретный идентификатор, у меня есть класс помощника JWT с кодированием и декодированием.
Как проверить заголовок и тело = подпись отправленного JWT, если это даже правильный способ сделать это.
Редактировать:
Я передаю свой токен, который
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbG93aWUuZXUuYXV0aDAuY29tXC8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwNDY4ODk4NjgxNzEwNjQ3Mjc5MCIsImF1ZCI6IlYwWWVaREliYmVGdEJ4Z3F2UkNzVkFjWWxscXpaZGlNIiwiZXhwIjoxNDc4NzMxNjIzLCJpYXQiOjE0Nzg2OTU2MjN9._uyKrxJ0lPR-tEPjOFiI5ygeiM689gqURcIfG4sWkWc
В котором я затем получаю тело этого токена и превращаю его в массив
Array ( [iss] => https://lowie.eu.auth0.com/ [sub] => google-oauth2|104688986817106472790 [aud] => V0YeZDIbbeFtBxgqvRCsVAcYllqzZdiM [exp] => 1478731623 [iat] => 1478695623 )
Как только у меня есть массив, это моя полезная нагрузка, верно?
// Вот изображение токена, проверяемого как правильное
https://gyazo.com/93777863d988d8c6ef0fc4ea50755949
так почему код ниже не дает мне тот же токен?
$jwt = JWT::encode($bodyArray, "SuperSecureSecretSecret");
пока я получаю это обратно
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2xvd2llLmV1LmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwNDY4ODk4NjgxNzEwNjQ3Mjc5MCIsImF1ZCI6IlYwWWVaREliYmVGdEJ4Z3F2UkNzVkFjWWxscXpaZGlNIiwiZXhwIjoxNDc4NzMxNjIzLCJpYXQiOjE0Nzg2OTU2MjN9.6lEg_0h0zytQZVBqDe-ZIS5PoSkFAJhWtRYSgaDCesY
Вы должны использовать существующую библиотеку, которая поддерживает тип используемой подписи JWT. Для быстрого ознакомления с доступными опциями для PHP проверьте Библиотеки раздел в jwt.io.
Использование существующей библиотеки является предпочтительным в большинстве ситуаций, однако также важно провести некоторую оценку качества библиотеки.
Для проверки подписи JWT прочитайте эту статью (Критические уязвимости в библиотеках JSON Web Token) убедиться, что использование вами библиотек не приводит к возможным уязвимостям.
Обновить:
Токены различаются, потому что они подписаны разными ключами, и полезная нагрузка также отличается; iss
в одном есть "https://lowie.eu.auth0.com/"
а с другой "https:\/\/lowie.eu.auth0.com\/"
, Вы можете проверить это, декодируя полезную нагрузку с помощью декодера Base64, и посмотрите на необработанный вывод.
Что еще более важно, вы не должны создавать никаких токенов, просто проверяя, что они действительны и были выпущены доверенным издателем, которому вы делегировали фактический процесс аутентификации.
Других решений пока нет …