Если вы когда-либо работали с аутентификацией, вы наверняка встречали термин JWT, а если нет, то это хорошая точка входа для вас в мир аутентификации. Сначала попытаемся понять, что такое Json Web Tokens? Затем мы посмотрим, как они вписываются в мир аутентификации, и, наконец, создадим простой API, использующий JWT. Пойдем.
Веб-токены JSON
Веб-токены JSON — это закодированные объекты JSON, которые используются для обмена информацией о безопасности между двумя сторонами.
Ух ты! Что все это значит? Давайте разберемся. Объект JSON имеет следующий формат:
{ "name": "John Doe", "occupation" : "existing" }
и этот объект кодируется, т.е. преобразуется в другой формат с использованием некоторой кодировки, такой как base64Url, в токенах JWT.
Веб-токен JSON состоит из трех частей:
Заголовок
Заголовок состоит из двух частей: типа токена и используемого алгоритма подписи. (Мы вернемся к тому, что мы подразумеваем под алгоритмом подписи)
{ “alg”: “HS256”, “typ”: “JWT” }
Затем заголовок кодируется Base64Url, чтобы стать частью JWT.
Полезная нагрузка
Полезная нагрузка содержит фактическую информацию, которую мы хотим отправить на сервер, например, нам нужно указать идентификатор пользователя на сервере.
{ "id": "thisislife" }
Полезная нагрузка также закодирована в формате Base64Url.
Подпись
Подпись создается с использованием закодированного заголовка, закодированных полезных данных и секрета. Затем значение окончательно хэшируется с использованием алогрифма. Это алгоритм подписи, который мы упомянули в полезных данных, тот алгоритм подписи, который используется для получения подписи. Это гарантирует, что JWT не будет затруднен во время передачи.
Signature = HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)
Какое место JWT занимает в мире авторизации?
Всякий раз, когда мы создаем API, у нас есть две разновидности конечных точек: одна общедоступная, то есть конечные точки, к которым может получить доступ любой пользователь, и другая — частные конечные точки, то есть те, которые являются пользовательскими…