Как да опростите удостоверяването на приложението си с помощта на JSON Web Token

Примерен поток за удостоверяване

Всяко приложение, което срещаме днес, прилага мерки за сигурност, така че потребителските данни да не се злоупотребяват. Сигурността винаги е нещо, което се променя и развива. Удостоверяването е една от съществените части на всяко приложение.

Има различни начини за удостоверяване на потребителя. Нека обсъдим автентификацията на базата на маркери чрез приложението node.js. За целта ще използваме уеб маркери JSON.

Какво представляват JSON уеб токените (JWT)?

JSON Web Tokens (JWT) е стандарт, който определя компактен и самостоятелен начин за сигурно предаване на информация между страните като JSON обект.

  • Компактен: По-малък размер, така че лесно да се прехвърля.
  • Самостоятелно съдържание: Тя съдържа цялата информация за потребителя.

Как работят?

Когато потребител изпрати заявка с необходимите параметри като потребителско име и парола. Приложението проверява дали потребителското име и паролата са валидни. При валидиране приложението ще създаде токен, използвайки полезен товар и секретен ключ. След това ще изпрати маркера обратно на потребителя, за да го съхранява и да го изпрати с всяка заявка. Когато потребителят изпрати заявка с този маркер, приложението проверява валидността със същия секретен ключ. Ако маркерът е валиден, заявката се обслужва, в противен случай приложението ще изпрати подходящо съобщение за грешка.

Поток на генерация на токени

структура

Основната структура на JWT е нещо като

подпис на полезен товар в заглавката
  • хедър: Съдържа тип токен и алгоритъм, използван за подписване. Получава кодиран към base64.
  • полезен товар: Всякакви персонализирани потребителски данни като потребителско име и имейл.
  • подпис: Хеш на кодирана глава, полезен товар и секретен ключ.

Предимства на JWT

  • Единичен ключ: Няма нужда от обаждания от база данни всеки път, за да се провери потребителят. Един секретен ключ ще декодира жетони, предоставени от всеки потребител.
  • Преносим: Същият маркер може да се използва сред различни домейни или различни платформи. Всичко, от което се нуждае, е ключът.
  • Лесно изтичане: Човек може да зададе времето за изтичане с помощта на JWT. След това изтича JWT.

Как можем да го направим?

Ще изградим приложение node.js с няколко маршрута и ще ги удостоверим с помощта на маркери. Изискват се основни познания за node.js и javascript.

Стъпка 1 - Отворете терминала. Стартирайте нов проект в директория

CD авт
npm init

Това ще започне нов проект. Процесът ще поиска определена информация. Въведете всички необходими подробности. Процесът ще създаде package.json и ще изглежда нещо подобно.

{
  "name": "auth",
  "версия": "1.0.0",
  "description": "приложение за обяснение на удостоверяването",
  "main": "server.js",
  "скриптове": {
    "test": "echo \" Грешка: не е посочен тест \ "&& изход 1"
  }
  "автор": "Вашето име",
  "лиценз": "ISC"
}

Стъпка 2 - Инсталирайте зависимостите. Отново се върнете към терминала и поставете следния ред.

npm инсталирайте експресен анализатор на тялото jsonwebtoken --save
  • express: рамка за уеб приложения Node.js.
  • body-parser: За да получите параметри от нашата POST заявка.
  • jsonwebtoken: За създаване и проверка на маркери.

След инсталиране на зависимостите. Нашият package.json ще изглежда така:

{
  "name": "auth",
  "версия": "1.0.0",
  "description": "приложение за обяснение на удостоверяването",
  "main": "server.js",
  "скриптове": {
    "test": "echo \" Грешка: не е посочен тест \ "&& изход 1"
  }
  "автор": "Вашето име",
  "лиценз": "ISC",
  "зависимости": {
    "анализатор на тялото": "^ 1.17.2",
    "express": "^ 4.15.3",
    "jsonwebtoken": "^ 7.4.1"
  }
}

Стъпка 3 - Създаване на сървър

Нека създадем сървър, обслужващ пристанище 3000, който изпраща index.html при извикване / route. Ще създадем / вход API, който удостоверява потребителя и API / getusers, който дава списък на потребителите. За сега да създадем фиктивни данни и да ги съхраняваме в масива „потребители“. Можете също така да ги замените с повиквания от база данни.

Стъпка 4 - Изградете клиента

Нека създадем клиент с помощта на HTML, Bootstrap и JavaScript. Нашият клиент има две части: екран за вход и място за изтегляне на потребителите. Екранът за влизане ще съдържа текстови полета за имейл и парола и бутон за изпращане на заявка. Ще добавим също текстово поле и бутон, за да предадем маркера и да получите списък с потребители.

Стъпка 5 - Стартирайте приложението

възел server.js

Нашето приложение ли е безопасно?

Не, може да видите, че дори да не преминете маркера, можете да получите списъка с всички потребители. Все още не сме внедрили удостоверяването Нека добавим удостоверяване към / getusers API, така че потребителите с валиден маркер да могат да извличат списъка с потребители.

Как да добавите удостоверяване?

  1. Включете JWT във файла server.js.
var jwt = изисквам ('jsonwebtoken');

2. Предайте полезния товар (всеки обект, тук предайте самия обект на потребителя) и секретен низ за подписване на функция и създаване на токен.

var token = jwt.sign (, );

3. Когато маркерът е създаден успешно, предайте същия на клиента.

res.json ({означение: знак});

След това можете да съхранявате токен от страна на клиента и да го предавате всеки път по време на сесията, за да се удостоверите. Нека променим функцията „getlist“, за да можем да предаваме токен на сървъра, когато искаме да имаме достъп до списъка с потребители.

Нека добавим междинен софтуер за удостоверяване / получаване или всеки защитен маршрут, който се добавя в бъдеще. Уверете се, че всички маршрути, които се нуждаят от удостоверяване, са под средния софтуер.

В server.js, първо имаме път за вход, който създава маркер. След това имаме среден софтуер, който ще използваме за проверка на маркера. Всички маршрути, които се нуждаят от удостоверяване, са след междинен софтуер. Редът е много важен.

4. За да декодирате, предавате маркера и секретния ключ, за да проверите функцията. Функцията ще върне грешка, ако маркерът е невалиден или успех, ако маркерът е валиден.

jwt.verify (означение "samplesecret", (ERR, decod) => {
  // вашата логика
})

Обадете се next (), така че да се извикат съответните маршрути.

Окончателният server.js ще изглежда така:

Крайният index.html ще изглежда така:

Това е. Това е прост пример за това как да използвате маркера за удостоверяване на приложението си. Сложих пълния код на GitHub. Може да го проверите там.

Благодаря за четенето и ме последвайте и препоръчайте същото на другите, като кликнете върху ♡. Моята дръжка за туитър е sudheeshshetty.