Как работает токен JWT с пустой полезной нагрузкой? - PullRequest
0 голосов
/ 05 января 2019

Я работаю с Snapchat API, чтобы попытаться войти в приложение, используя их поток OAuth. Как только пользователь вошел в систему через Snapchat, я пытаюсь перепроектировать (поскольку у них нет документации по этому вопросу), как получить какой-то уникальный идентификатор для пользователя, чтобы я мог связать его с локальным пользователем в моей базе данных. Вот как я раньше делал это с такими вещами, как Facebook. Пользователь входит в систему и получает токен доступа через API Facebook, а я могу извлечь какой-то уникальный идентификатор для пользователя через API Facebook.

API Snapchat Snapchat позволяет вам получить доступ только к отображаемому имени пользователя и некоторому «externalId», который, я не могу гарантировать, не изменится. Поэтому я расшифровал токен JWT, который мне выдал Snapchat, и это поставило под сомнение мое понимание того, как работают токены JWT. Когда я декодировал токен в http://jwt.io,, я увидел, что полезная нагрузка была пуста, но токен работает при вызове конечной точки https://kit.snapchat.com/v1/me. Как сервер Snapchat может определить, кто я? Я всегда понимал, что JWT должен включать в себя утверждение, такое как sub, которое идентифицирует пользователя. Сервер может затем использовать эту информацию, чтобы узнать, кто я.

В этом случае моя полезная нагрузка JWT пуста, но вышеупомянутая конечная точка все еще возвращает мои пользовательские данные. Что здесь происходит? Как сервер узнает, кто я, когда мой токен JWT имеет пустую полезную нагрузку? Для меня они должны хранить копию моего токена JWT на сервере, что кажется неправильным способом использования токенов JWT. Возможно, мое понимание ужасно неправильно. Есть мысли?

1 Ответ

0 голосов
/ 05 января 2019

Полезная нагрузка JWS (подписанный токен) может быть отсоединена и передана аудитории другими способами.

Эта функция описана в Приложении F спецификации.

В режиме компактной сериализации JWS (самый распространенный формат) токен выглядит как THE_HEADER.THE_PAYLOAD.THE_SIGNATURE. С отделенной полезной нагрузкой она идентична, за исключением того, что THE_PAYLOAD является пустой строкой: THE_HEADER..THE_SIGNATURE.

Проверка подписи такая же, как с прикрепленной полезной нагрузкой. Получатель должен был получить полезную нагрузку и воссоздать полный ввод, т. Е. THE_HEADER.THE_PAYLOAD.

Относительно идентификации, выполняемой snapshat, ссылка на отсоединенную полезную нагрузку может быть установлена ​​в параметре заголовка токена (первой части токена), позволяя Snapchat полностью проверить токен.

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