Если вы когда-либо работали с аутентификацией, вы наверняка встречали термин 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, у нас есть две разновидности конечных точек: одна общедоступная, то есть конечные точки, к которым может получить доступ любой пользователь, и другая — частные конечные точки, то есть те, которые являются пользовательскими…