І JWT, і OAuth можуть допомогти вам підвищити безпеку вашої веб-програми, пропонуючи безпечну автентифікацію та авторизацію. Але який з них слід застосувати, щоб дозволити користувачам безпечно отримувати доступ до вашої веб-програми? Щоб відповісти на це запитання, ми підготували детальну статтю про JWT проти OAuth.
Прочитавши його, ви матимете чітке уявлення про те, що таке JWT і OAuth, які переваги вони пропонують, чим вони відрізняються, і який з них слід застосувати, щоб підвищити безпеку веб-додатків.
Без зайвих слів, давайте зануримося.
Що таке JWT?
JWT, що означає JSON Web Token, є відкритим стандартом, який визначає спосіб безпечного обміну інформацією між двома сторонами як об’єкт JSON. Оскільки інформація має цифровий підпис, сторони можуть довіряти та перевіряти інформацію, передану через веб-токени JSON.
Відносно невеликий розмір JWT дозволяє надсилати їх через параметр POST, URL-адресу або всередині заголовка HTTP. Веб-токен JSON складається з трьох частин: заголовка, корисного навантаження та підпису.
Заголовок повідомляє, який це тип токена та який алгоритм підпису використовується. Частина корисного навантаження JWT включає заяви, які є заявами про користувачів і додаткові дані.
Як випливає з назви, частина «Підпис» веб-токена JSON має підпис, який підтверджує, що повідомлення не було модифіковано на шляху.
Як працюють JWT
Джерело зображення: DEV
Нижче показано, як працює веб-токен JSON.
Вхід користувача
Користувачі входять у вашу веб-програму, надаючи свої імена користувачів і паролі. Потім ваша програма передає ці облікові дані для входу на сервер автентифікації.
Генерація маркерів
Після того, як сервер автентифікації перевірить облікові дані користувачів, він генерує веб-токени JSON і надсилає їх користувачам. Ці JWT можуть містити важливу інформацію про користувачів і сеанси автентифікації. Користувачі зберігають ці JWT локально. На основі налаштувань сервер також може підписувати JWT за допомогою загального секретного або закритого ключа для підвищення безпеки.
Перевірка маркера
Коли користувачі надсилають запити до вашого сервера програм для доступу до будь-якого ресурсу, вони включатимуть свої JWT у свої запити до сервера. Ваш сервер додатків перевірить підписи в JWT і перевірить претензії в корисних навантаженнях, щоб перевірити, чи дозволено користувачам доступ до запитаних ресурсів.
Якщо JWT дійсні, користувачам буде надано доступ до запитаних ресурсів у вашій веб-програмі.
Випадки використання JWT
Веб-токени JSON можна використовувати такими способами:
#1. Авторизація
Після успішного входу користувачів у вашу веб-програму через кінцеву точку входу сервер автентифікації видасть їм JWT. Користувачі використовуватимуть свої JWT для доступу до ресурсів у програмі, які потребують автентифікації для підтвердження своєї особи.
Обмін інформацією між сторонами
Веб-токен JSON може бути правильним варіантом для безпечної передачі інформації дійсним користувачам. Веб-токени JSON підписані, щоб гарантувати, що інформація надходить із оригінального джерела. Крім того, структура JWT (частина підпису) дозволяє одержувачам перевіряти, чи інформація не змінюється по дорозі.
Переваги JWT
Нижче наведено ключові переваги впровадження JWT у вашу веб-програму.
- На відміну від маркерів SAML, JWT є легкими. Отже, ви можете швидко реалізувати їх у середовищах HTML і HTTP, що робить JWT ідеальними для клієнтських додатків, таких як мобільні додатки.
- JWT пропонують надійну безпеку. Ви можете симетрично підписувати JWT за допомогою спільного секрету за допомогою алгоритму HMAC або закритого ключа, щоб підписувати їх асиметрично.
- JWT мають вбудований механізм закінчення терміну дії, що дає змогу встановити термін дії JWT для підвищення безпеки.
- Веб-токени JSON широко застосовуються різними рішеннями єдиного входу. Як наслідок, з JWT легко працювати.
Крім того, JWT можуть заощадити місце для зберігання бази даних у вашій компанії. Це тому, що ваш сервер створює лише JWT, і вони зберігаються на стороні клієнта. Крім того, JWT не вимагає пошуку в базі даних.
Таким чином, JWT можна швидко перевірити, пропонуючи чудову взаємодію з користувачем.
Обмеження JWT
Хоча JWT є чудовим способом авторизації користувачів. Вони мають певні обмеження, наприклад:
- Ви несете відповідальність за забезпечення безпеки ключа шифрування. Якщо хакер отримає ключ, який підписує ваші JWT, у вас великі проблеми. Вони можуть створювати підроблені токени, які плутаються з вашими даними користувача. Це величезний ризик для безпеки.
- JWT не потребують виклику бази даних для кожної перевірки, що звучить добре. Але якщо вам потрібно якнайшвидше відкликати одне, вам доведеться додати його до чорного списку. Це не швидке чи просте завдання.
- Коли термін дії JWT закінчується, це не просто питання продовження таймера. Ваша система попросить користувача знову увійти, щоб отримати новий маркер. Це ускладнює весь процес, вимагаючи більше уваги щодо досвіду користувача та потоків безпеки. Щоб полегшити процес, ви можете реалізувати маркери оновлення в поєднанні з JWT. Коли термін дії маркера доступу закінчується, клієнти можуть використовувати ці маркери оновлення для запиту нових маркерів доступу без повторного надання клієнтом облікових даних для входу.
- Впровадження JWT у вашу веб-програму не є простим завданням; це вимагає додаткової інженерної роботи. Вам потрібно буде налаштувати процес створення маркера, вибрати правильний механізм підпису відповідно до вашої програми та інтегрувати все це в існуючу архітектуру.
JWT — це не одноетапне рішення, а радше проект, який потребує ретельного планування та виконання.
Що таке OAuth?
OAuth, скорочення від відкритої авторизації, є відкритим стандартним протоколом авторизації для авторизації. Це дозволяє веб-додаткам або веб-сайтам отримувати доступ до ресурсів, розміщених сторонніми програмами, від імені користувачів без надання користувачами облікових даних для входу в сторонні програми.
Тепер, написаний як OAuth 2.0 (остання версія OAuth), він широко використовується для автентифікації користувачів через сервер автентифікації.
Наприклад, за допомогою OAuth користувачі можуть входити у вашу програму за допомогою своїх облікових записів Facebook або Google. Але вони введуть свої облікові дані лише в облікових записах Facebook або Google.
Як працює OAuth
Джерело зображення: Зохо
Наприклад, у вас є програма для керування часом. А щоб дозволити будь-кому ефективно використовувати вашу програму, вам потрібен доступ до їхніх електронних скриньок. Раніше користувачі мали ділитися своїми обліковими даними з вашою програмою, щоб дозволити програмі отримати доступ до їхніх вхідних повідомлень. OAuth2.0 вирішив цю проблему.
Ось як виглядає робочий процес OAuth2.0:
Тепер ваша програма для керування часом може отримати доступ до папки “Вхідні” користувача. Як і Oauth різні види грантівпроцес авторизації може дещо відрізнятися залежно від типів надання авторизації.
Переваги OAuth
Нижче наведено основні переваги використання OAuth.
- OAuth є загальноприйнятим стандартом. Це означає, що всі провідні служби автентифікації розуміють і використовують OAuth.
- Завдяки широкому використанню та сумісності користувачі знайдуть на вибір багато плагінів і функцій OAuth.
- OAuth пропонує перевірені клієнтські бібліотеки майже для всіх мов програмування та веб-фреймворків. Отже, ви можете використовувати бажану мову з OAuth.
- OAuth є дуже безпечним і добре перевіреним. Оскільки він настільки широко використовується, експерти вже розглянули всі можливі ризики безпеці.
- OAuth чудово підходить для роз’єднання коду. Ваш основний код програми не буде зіпсований під час виконання завдань автентифікації. Це полегшує керування програмою та її оновлення в довгостроковій перспективі.
Випадки використання OAuth
Нижче наведено кілька популярних випадків використання OAuth.
- Найпоширенішим використанням OAuth 2.0 є надання стороннім програмам доступу до облікових записів користувачів. За допомогою OAuth 2.0 користувачі можуть дозволити третім сторонам отримувати доступ до своїх даних, що зберігаються в різних службах, не надаючи третім сторонам облікові дані для входу в ці служби.
- Як власник веб-програми ви можете застосувати OAuth 2.0 для впровадження системи єдиного входу. Ви можете дослідити ці рішення OAuth з відкритим кодом для свого проекту.
- Ви можете застосувати OAuth 2.0 у своєму шлюзі API, щоб шлюз API діяв як сервер авторизації. Це гарантує, що шлюз API пересилатиме запити від клієнтів із дійсними маркерами доступу.
- OAuth 2.0 може надати можливість IoT і розумним пристроям, таким як холодильники чи телевізори, взаємодіяти зі сторонніми API від імені користувачів. Це стане в нагоді, коли користувач хоче увійти в додаток на гаджетах без звичайної клавіатури, як-от Smart TV або ігрова консоль.
Обмеження OAuth
Діапазон доступних потоків може лякати тих, хто тільки починає працювати з OAuth. Це не просто вибір одного; іноді вам потрібна комбінація для задоволення всіх ваших вимог безпеки. Через таку складність початківцям може бути важко зрозуміти, з чого почати, що використовувати та як це ефективно інтегрувати.
Кожен потік служить унікальній меті, чи то для мобільних додатків, міжсерверного зв’язку чи веб-додатків. Отже, перш ніж зробити вибір, уважно проаналізуйте свої потреби.
OAuth 2.0 залежить від SSL/TLS для забезпечення безпеки. Якщо SSL/TLS налаштовано неправильно, безпека OAuth 2.0 може бути під загрозою.
Крім того, OAuth може викликати проблеми з конфіденційністю, особливо під час відстеження активності користувачів. Коли ви користуєтеся такою службою, як «Вхід через Google», Google може дізнатися про вашу активність на цьому сторонньому сайті. Google може не тільки знати, що ви ввійшли, але й відстежувати, як часто та коли ви взаємодієте з цим сайтом.
Крім того, OAuth може бути надмірним для простіших налаштувань, як-от додаток із лише зовнішнім і заднім кінцем. У таких випадках вам можуть не знадобитися її складності.
Різниця між JWT і OAuth
JWT і OAuth виконують важливу функцію перевірки ідентичності користувача для авторизації доступу до ресурсів. Вони є основними інструментами в системі безпеки, але відрізняються за обсягом, складністю та застосуванням.
ФункціїJWTsOAuthОсновне використанняJWT зосереджено на API. OAuth охоплює веб, браузер, API та інші програми. Маркер проти протоколу. JWT — це формат маркера. OAuth — це протокол авторизації. StorageJWT покладається лише на сховище на стороні клієнта. OAuth використовує як клієнтську, так і сховище на стороні сервера. Гнучкість JWT більш обмежені за обсягом. OAuth пропонує більшу гнучкість і ширший спектр випадків використання. Простота використання JWT простіші та легші для сприйняття. OAuth складніший.
У той час як JWT є більш простими та орієнтованими на безпеку API, OAuth надає комплексне рішення механізму автентифікації, яке можна адаптувати до різних сценаріїв.
А протокол OAuth може дозволити користувачам надати стороннім програмам доступ до їхніх даних на іншій платформі, не розкриваючи своїх даних для входу.
Те, чи буде один із них кращим, залежить від конкретних потреб відповідної системи чи мережі.
Чи можна використовувати JWT і OAuth разом?
Хоча JWT і OAuth служать різним цілям, їх можна об’єднати.
Протокол OAuth не вказує жодного формату маркера, який потрібно використовувати строго. Таким чином, ви можете реалізувати JWT в OAuth.
Наприклад, сервер автентифікації OAuth2 може видати маркер доступу з JWT. І цей JWT може включати додаткову інформацію в корисне навантаження, покращуючи продуктивність. Це пов’язано з тим, що між серверами автентифікації та серверами ресурсів буде зменшено зворотні передачі.
Поєднання JWT і OAuth2 також може відбуватися за допомогою підходу з подвійним маркером — OAuth2 видає два окремі маркери в цьому методі: access_token і JWT. JWT містить додаткову ідентифікаційну інформацію. Цей підхід забезпечує додатковий рівень деталізації, надаючи вам більше контролю над доступом користувачів і даними.
Вирішально використовувати OpenID Connect, вибираючи цю стратегію з подвійними маркерами. OpenID Connect базується на OAuth2 і додає більше стандартизованих полів до маркерів.
Використання JWT замість OAuth2 може зробити роботу швидшою та менш складною для конкретних завдань. Але це також може ускладнити розвиток.
Вирішуючи використовувати JWT з OAuth2, подумайте, чи виправдовує підвищення швидкості додаткову роботу в розробці.
Висновок
У битві JWT проти OAuth за максимальну веб-безпеку кожен має переваги та недоліки. JWT чудово підходить для швидкої автентифікації без збереження стану, але має такі обмеження, як відсутність вбудованого відкликання. OAuth чудово підходить у складних сценаріях авторизації, але може бути надмірним для більш простих проектів.
Якщо вам потрібна надійна авторизація та ефективна автентифікація, подумайте про поєднання JWT і OAuth через OpenID Connect.
Ваш вибір має залежати від конкретних потреб проекту, а не лише від галасу навколо цих технологій.
Крім того, ви можете дослідити ці популярні платформи автентифікації користувачів, щоб вибрати найкраще рішення для своєї програми.