Посібники

Що таке автентифікація? Входи, сесії та OAuth пояснено

Автентифікація — це спосіб, яким застосунок підтверджує, хто є користувачем. Зазвичай перевіряється щось, що людина знає (пароль), щось, що вона має (код, надісланий на телефон чи електронну пошту), або посвідчення від іншого довіреного сервісу (наприклад, «Увійти через Google»). Коли користувача автентифіковано, застосунок запам'ятовує його за допомогою сесії або токена, щоб йому не доводилося входити на кожній сторінці. Вирішення того, що саме цьому відомому користувачеві дозволено робити, — окремий крок, який називається авторизацією.

Чому це важливо, коли ви створюєте з ШІ

Додавання входу — один із найпоширеніших запитів до ШІ-конструкторів і один із найлегших для тонких помилок. Сторінку входу згенерувати просто. Складна частина — все навколо неї:

  • Чи безпечно зберігаються паролі?
  • Чи перевіряє кожна приватна сторінка і кожна кінцева точка API, хто запитує?
  • Чи може клієнт, який увійшов, побачити дані іншого клієнта, змінивши число в URL?
  • Що відбувається, коли хтось забуває пароль?

Застосунок може виглядати цілком безпечним і при цьому провалювати кожен із цих пунктів. Розуміння рухомих частин допоможе ставити правильні запитання і перевіряти правильні речі.

Повсякденна аналогія

Уявіть, що ви заселяєтеся в готель.

На стійці реєстрації ви показуєте документ. Це автентифікація: доведення, хто ви є. Адміністратор видає вам картку-ключ. Ця картка — ваша сесія: протягом проживання ви більше не показуєте документ, а лише прикладаєте картку.

Картка відкриває ваш номер, спортзал і ліфт на вашому поверсі, але не номери інших гостей і не службове приміщення. Це авторизація: до чого ваша особа має доступ. Якщо ви загубите картку, готель може деактивувати її на стійці (відкликання сесії). Коли ви виїжджаєте, вона перестає працювати (вихід із системи або закінчення строку).

«Увійти через Google» — це як коли готель приймає лист від довіреного партнера, в якому написано «це така-то особа», замість того щоб перевіряти ваш документ самостійно.

Основні способи входу

СпосібЯк працюєПлюсиМінуси
Електронна пошта + парольКористувач обирає пароль; застосунок зберігає його хешЗвично, немає зовнішньої залежностіПотрібно безпечно зберігати хеші та обробляти скидання
Магічне посилання / одноразовий кодЗастосунок надсилає на пошту посилання або код для входуНемає паролів, які можна вкрасти чи забутиЗалежить від доставки пошти; вхід повільніший
Вхід через соцмережі (OAuth / OpenID Connect)Користувач входить через Google, Apple, GitHub тощоШвидко для користувачів; ви не зберігаєте парольНалаштування для кожного провайдера; не всі мають такі облікові записи
Хостинговий провайдер автентифікаціїСервіс на кшталт Clerk, Auth0 або Supabase Auth бере на себе реєстрацію, вхід і скиданняМенше роботи з безпекою для васМісячна плата за масштаб; ще одна залежність
Багатофакторна автентифікація (MFA / 2FA)Другий крок після першого, наприклад код із застосунку-автентифікатораНабагато важче зламатиТрохи більше тертя

Як слід зберігати паролі

Безпечний застосунок ніколи не зберігає ваш справжній пароль. Натомість він зберігає хеш: результат односторонньої функції, яка перетворює пароль на фіксований рядок. Коли ви входите, застосунок хешує введене вами і порівнює результат із збереженим хешем.

Дві деталі роблять це безпечним:

  • Сіль — випадкове значення, що додається до кожного пароля перед хешуванням, тож два люди з однаковим паролем матимуть різні хеші, а заздалегідь обчислені таблиці пошуку марні.
  • Повільний алгоритм, створений для паролів — наприклад Argon2, bcrypt або scrypt. Універсальні хеші на кшталт MD5 чи SHA-256 самі по собі занадто швидкі; зловмисники можуть перебрати мільярди варіантів.

Хешування — це не шифрування. Зашифровані дані можна розшифрувати ключем; хеш пароля спроєктовано так, щоб його взагалі не можна було повернути назад.

Сесії проти токенів

Після входу застосунку потрібно впізнавати вас у кожному запиті. Є два поширені підходи.

Сесія (cookie)Токен (наприклад, JWT)
Що зберігає браузерВипадковий ідентифікатор сесії в cookieПідписаний токен з даними користувача та строком дії
Де живе стан входуНа сервері, у базі даних або сховищіУсередині самого токена
Вихід з усіх пристроївЛегко: видалити сесію на серверіСкладніше: токен діятиме, доки не мине строк, якщо тільки ви не ведете список заблокованих
Типове використанняТрадиційні вебзастосункиAPI, мобільні застосунки, сервіси, які взаємодіють між собою

Для cookie важливі три налаштування: HttpOnly (JavaScript на сторінці не може прочитати cookie), Secure (передається лише через HTTPS) і SameSite (обмежує надсилання під час запитів з інших сайтів). Зберігання токенів у localStorage браузера поширене, але відкриває їх будь-якому скрипту, що працює на сторінці.

OAuth і «Увійти через Google»

OAuth 2.0 — це стандарт делегованої авторизації: він дозволяє застосунку отримати обмежений доступ до вашого облікового запису в іншому сервісі, наприклад читати ваш календар Google, не бачачи вашого пароля від Google. Вас перенаправляють до Google, ви підтверджуєте конкретні дозволи (їх називають scopes), а Google видає застосунку токен лише для цих дозволів.

Сам OAuth створювався для надання доступу, а не для того, щоб підтверджувати, хто ви. OpenID Connect (OIDC) — це шар поверх OAuth 2.0, який додає ідентифікацію; саме його використовують «Увійти через Google» чи «Увійти через Apple». Щоб це налаштувати, ви реєструєте застосунок у провайдера і отримуєте client ID та client secret; секрет залишається на вашому сервері.

Практичний приклад: вхід у клієнтський портал

Припустимо, ви створюєте портал, де клієнти дизайн-агентства бачать свої проєкти і рахунки.

  • Автентифікація: клієнти входять через електронну пошту за магічним посиланням, тож паролі не потрібно вести. Співробітники агентства входять через облікові записи Google Workspace.
  • Ролі: кожен користувач має роль — client або staff.
  • Правила авторизації:
ДіяКлієнтСпівробітник
Бачити проєкти своєї компаніїТакТак
Бачити проєкти інших компанійНіТак
Завантажувати файл до проєктуЛише до своїх проєктівТак
Позначити рахунок оплаченимНіТак
  • Де це забезпечується: на сервері, для кожного запиту. Сервер знаходить користувача, який увійшов, і повертає лише ті проєкти, де project.company_id збігається з компанією користувача. Приховати кнопку «Позначити оплаченим» недостатньо — кінцева точка сама повинна відхилити запит.

Пояснення поширених термінів

ТермінЗначення
Автентифікація (AuthN)Підтвердження того, хто є людина.
Авторизація (AuthZ)Визначення того, що їй дозволено робити.
СесіяЗапам'ятовування застосунком того, що ви увійшли, між запитами.
CookieНевеликий фрагмент даних, який браузер надсилає назад на сайт з кожним запитом.
JWTJSON Web Token: підписаний компактний токен з твердженнями, наприклад ідентифікатором користувача і строком дії.
Роль / дозвілМітки на кшталт admin або member, що визначають доступ.
MFA / 2FAВимога другого підтвердження, наприклад коду з застосунку-автентифікатора.
SSOЄдиний вхід: один логін (часто обліковий запис компанії) для багатьох застосунків.
401 проти 403«Хто ви?» (не автентифіковано) проти «Вам так не можна» (не авторизовано).

Поширені помилки та хибні уявлення

  • Перевірка прав лише на сторінці. Якщо браузер приховує кнопку, а API не перевіряє доступ, будь-хто може викликати API напряму.
  • Довіра до ідентифікаторів з URL. /invoices/1042 має перевіряти, що рахунок 1042 належить користувачеві, який увійшов.
  • Створення власної криптографії. Використовуйте відомі бібліотеки чи провайдерів; не дозволяйте ШІ вигадувати власну схему хешування.
  • Слабке скидання пароля. Посилання для скидання мають працювати лише один раз, швидко спливати і не показувати, чи є обліковий запис для цієї пошти.
  • Плутанина між входом у ваш застосунок і входом у ваш конструктор. Користувачі вашого застосунку відокремлені від вашого облікового запису в інструменті, яким ви його створюєте.
  • Немає обмеження спроб входу. Без нього зловмисники можуть безкінечно підбирати паролі.

Що просити у вашого ШІ-конструктора

  • «Додай реєстрацію і вхід, використовуючи [відому бібліотеку або провайдера]. Не пиши власне хешування паролів».
  • «Зберігай паролі з хешуванням bcrypt або Argon2».
  • «Для сесії використовуй cookie з HttpOnly і Secure».
  • «Додай ролі: admin і member. Перелічи кожну кінцеву точку і те, які ролі можуть її викликати».
  • «Забезпеч на сервері, щоб користувачі могли читати і редагувати лише свої записи. Потім покажи, як ти це перевірив».
  • «Додай скидання пароля з одноразовими посиланнями, які спливають за годину».
  • «Обмеж кількість спроб входу».

Потім перевірте сам: створіть два облікові записи і спробуйте отримати доступ до даних одного, увійшовши під іншим. Посібник з додавання входу і контрольний список безпеки розкривають тему докладніше.

Автентифікація в Mythex

Mythex не надає вбудованого продукту автентифікації для користувачів вашого застосунку; ви обираєте підхід — електронну пошту і пароль, що зберігаються у базі даних вашого проєкту, або SDK хостингового провайдера — і просите агента його додати. Ключі провайдера зберігаються в секретах проєкту, а не в чаті. Це окремо від того, як ви входите в сам Mythex. Рецепт документації щодо додавання входу до застосунку містить стартовий промпт, який можна адаптувати, а що таке API пояснює, де розміщені ці серверні перевірки.

Запитання

У чому різниця між автентифікацією та авторизацією?

Автентифікація перевіряє, хто ви, наприклад через пароль. Авторизація визначає, що вам дозволено робити, коли вас упізнали: чи можете ви бачити адмін-сторінку або редагувати чуже бронювання. Застосункам потрібні обидві.

Що таке OAuth?

OAuth 2.0 — це стандарт, який дозволяє застосунку отримати обмежений доступ до вашого облікового запису в іншому сервісі без того, щоб він бачив ваш пароль. «Увійти через Google» використовує OpenID Connect, рівень ідентифікації, побудований поверх OAuth 2.0, тож застосунок дізнається, хто ви, від Google.

Чи повинен мій застосунок зберігати паролі?

Ніколи у читабельному вигляді. Якщо ви використовуєте вхід через електронну пошту і пароль, паролі мають зберігатися як солені хеші, створені повільним алгоритмом, призначеним для паролів, наприклад Argon2 або bcrypt. Багато застосунків уникають цього, використовуючи хостингового провайдера автентифікації, вхід через соцмережі або магічні посилання на електронну пошту.

Сесії чи токени — що краще для мого застосунку?

Підходить обидва варіанти. Сесія зберігає стан входу на сервері, а браузер отримує випадковий ідентифікатор у cookie — його легко відкликати. Токен на кшталт JWT сам несе підписану інформацію, що добре для API та мобільних клієнтів, але його важко скасувати до закінчення строку дії. Для типового вебзастосунку сесії на основі cookie — надійний вибір за замовчуванням.

Mythex · Pricing · Створюйте що завгодно з ШІ · Шаблони сайтів і застосунків · Порівняння Mythex · Глосарій створення застосунків за допомогою ШІ · Безкоштовні інструменти для створення застосунків за допомогою ШІ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)