JavaScript
- 2 ответа
- 0 вопросов
0
Вклад в тег
mysql2
. Но в Rails Вам не надо работать с СУБД, Rails это делает за Вас. Конечно, можно и самому писать запросы, но в большинстве случаев этого не понадобится, благодаря гибкости моделей в RoR.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.6-NqQiSlSYgbZ-x31JH6g17DkFiTu04VM6CPiptriB0
то можно заметить, что он состоит из трёх частей, разделенных точкой.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
— это заголовок. JSON-объект, закодированный в base64 строку, содержащий информацию о самом токене: тип и алгоритм шифрования, используемый для получения подписи. Если раскодировать строку, то получается {"alg":"HS256","typ":"JWT"}
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
— это полезная нагрузка. JSON-объект, который был сформирован сервером (эмитентом) при создании токена. Точно так же как и заголовок является base64 стрококой. Если раскодировать, то в данном примере получается {"sub":"1234567890","name":"John Doe","iat":1516239022}
6-NqQiSlSYgbZ-x31JH6g17DkFiTu04VM6CPiptriB0
— это подпись. В данном примере подпись сформирована с помощью алгоритма HS256 (что указано в первой части токена) следующим образом: HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
jwt-secret
)
jwt-secret
. Секретный ключ неизвестен клиенту, поэтому он не может сам сформировать JWT с любыми данными. Точнее может, но не может к этим данным сделать валидную подпись, так как не знает секрет. Сервер же секрет знает, поэтому может вычислить подпись из первых двух частей токена и сравнить её с третьей частью.iat
(issued at) — время, когда токен был выдан. Или exp
(expiration time) — время, после наступления которого токен станет истёкшим. JWT библиотеки используют exp
и при валидации токена выдают ошибку, если указанное время уже прошло.