JSON Web Token
Методов авторизации и аутентификации есть много, но в последнее время большинство из них основывается на JWT.
JSON Web Token — это созданная в определенном формате base64 строка. JWT считается одним из самых безопасных и удобных форматов для передачи токенов и небольшого набора пользовательских данных с запросом.
Особенность такого формата токена в первую очередь заключается в удобстве. JWT — полностью самодостаточная единица информации. Все необходимые для идентификации данные можно хранить в самом токене, в блоке с полезной нагрузкой.
Каждый токен доступа состоит из трёх основных частей:
— Заголовок, в котором определяется информация о самом токене
— Полезная нагрузка — JSON объект, куда записываются все данные, необходимые для авторизации
— Подпись — ключ, который, пусть и не позволит зашифровать сам токен, зато дает возможность валидировать токен на изменения.
Части токена разделяются точками.
Вот так это может выглядеть.
В этом токене в качестве полезной нагрузки использовался такой объект:
Причём, обратите внимание на то, что чувствительную информацию в токене хранить всё равно нельзя. Не забывайте, что JWT — это всего лишь
Да и вообще, чем меньше данных о пользователе, тем лучше.
И на этом, в целом, всё. Спасибо за прочтение, это важно для меня ❤️
#data #theory #useful
Методов авторизации и аутентификации есть много, но в последнее время большинство из них основывается на JWT.
JSON Web Token — это созданная в определенном формате base64 строка. JWT считается одним из самых безопасных и удобных форматов для передачи токенов и небольшого набора пользовательских данных с запросом.
Особенность такого формата токена в первую очередь заключается в удобстве. JWT — полностью самодостаточная единица информации. Все необходимые для идентификации данные можно хранить в самом токене, в блоке с полезной нагрузкой.
Каждый токен доступа состоит из трёх основных частей:
— Заголовок, в котором определяется информация о самом токене
— Полезная нагрузка — JSON объект, куда записываются все данные, необходимые для авторизации
— Подпись — ключ, который, пусть и не позволит зашифровать сам токен, зато дает возможность валидировать токен на изменения.
Части токена разделяются точками.
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwcm9nd2F5IiwiaWF0IjoxNjg4MDMzMzI1LCJleHAiOjE3MTk1NjkzMjUsImF1ZCI6Ind3dy5wcm9nd2F5LmNvbSIsInN1YiI6InByb2d3YXkiLCJuYW1lIjoiRGVuaXMiLCJzdXJuYW1lIjoiUHV0bm92IiwiZW1haWwiOiJwcm9nd2F5QGVtYWlsLmNvbSIsInJvbGUiOiJBRE1JTiJ9.BTdcnNwZBfAHEmZEwf2P7s724Q1sZ60N2dHVRXhGtHI
Вот так это может выглядеть.
В этом токене в качестве полезной нагрузки использовался такой объект:
{
"name": "Denis",
"surname": "Putnov",
"email": "progway@email.com",
"role": "ADMIN"
}
Причём, обратите внимание на то, что чувствительную информацию в токене хранить всё равно нельзя. Не забывайте, что JWT — это всего лишь
base64
, поэтому декодировать его сможет любой желающий. Да и вообще, чем меньше данных о пользователе, тем лучше.
И на этом, в целом, всё. Спасибо за прочтение, это важно для меня ❤️
#data #theory #useful
👍28❤9🔥3🐳2🍌2☃1🥰1
Ссылочные типы и типы значений в JavaScript
Перед прочтением я рекомендую пробежаться по ещё одному посту из канала о том, какие типы данных есть в JavaScript.
В языке JavaScript, типы данных можно разделить на две большие группы:
Типы значений — примитивы — данные, что языком воспринимаются по конкретному значению. Например, строка
Ссылочные типы — типы данных, которые интерпретатор языка воспринимает по ссылке. Переменная больше не хранит в себе конкретное значение, зато сохраняет ссылку на место в памяти, где это самое значение хранится.
К ссылочным типам данных относятся:
— объекты
— массивы
— функции
Казалось бы, а какая разница? Но разница заключается в способе хранения и передачи этих самых данных через переменные, а так же в способе взаимодействия с ними.
Типы значений потому и называются примитивами, так как максимально просты и предсказуемы в этом плане. Такие переменные, по сути, представляют собой просто некоторую последовательность байт. При сравнении таких переменных, всё, что нужно сделать языку — посимвольно сравнить цепочки байт и выдать результат.
Ссылочные же типы, в свою очередь, могут вызвать много проблем при работе с ними. Переменная сохраняет под собой не конкретную последовательность байт, а, как и говорилось выше, лишь некоторую ссылку на ячейку памяти, в которой нужная для нас информация (байты) и записаны. Из ключевых особенностей таких типов данных сразу же приходит на ум их копирование, с чем часто возникают проблемы у новичков и не только.
Например, в этом случае мы получаем не ожидаемый для многих вывод в консоль:
Связано это со спецификой работы
Более подробно о понятии глубокого копирования я расскажу в отдельном посте. Он будет одним из следующих.
#javascript #data #theory #useful
Перед прочтением я рекомендую пробежаться по ещё одному посту из канала о том, какие типы данных есть в JavaScript.
В языке JavaScript, типы данных можно разделить на две большие группы:
Типы значений — примитивы — данные, что языком воспринимаются по конкретному значению. Например, строка
"Hello, World!"
или число 5
.Ссылочные типы — типы данных, которые интерпретатор языка воспринимает по ссылке. Переменная больше не хранит в себе конкретное значение, зато сохраняет ссылку на место в памяти, где это самое значение хранится.
К ссылочным типам данных относятся:
— объекты
— массивы
— функции
Казалось бы, а какая разница? Но разница заключается в способе хранения и передачи этих самых данных через переменные, а так же в способе взаимодействия с ними.
Типы значений потому и называются примитивами, так как максимально просты и предсказуемы в этом плане. Такие переменные, по сути, представляют собой просто некоторую последовательность байт. При сравнении таких переменных, всё, что нужно сделать языку — посимвольно сравнить цепочки байт и выдать результат.
Ссылочные же типы, в свою очередь, могут вызвать много проблем при работе с ними. Переменная сохраняет под собой не конкретную последовательность байт, а, как и говорилось выше, лишь некоторую ссылку на ячейку памяти, в которой нужная для нас информация (байты) и записаны. Из ключевых особенностей таких типов данных сразу же приходит на ум их копирование, с чем часто возникают проблемы у новичков и не только.
Например, в этом случае мы получаем не ожидаемый для многих вывод в консоль:
const obj = {
name: "Denis",
address: {
street: 'Lenina',
apartment: 10
}
}
const clone = Object.assign({}, obj)
obj.address.street = 'Pushkina'
console.log(clone.address.street) // Pushkina
Связано это со спецификой работы
Object.assign
и особенностями копирования вложенных объектов. В этом случае копирование считается неглубоким, поэтому скопированный объект также изменяется.Более подробно о понятии глубокого копирования я расскажу в отдельном посте. Он будет одним из следующих.
#javascript #data #theory #useful
🔥20👍11❤4🐳2