Я все ще намагаюся знайти найкраще рішення для захисту API REST API, оскільки кількість мобільних додатків та API збільшується з кожним днем.
Я спробував різні способи аутентифікації, але все ж має деякі непорозуміння, тому мені потрібна порада когось більш досвідченого.
Дозвольте розповісти, як я розумію все це. Якщо я щось неправильно розумію, будь ласка, повідомте мене про це.
Наскільки REST API не має статусу, а також WEB взагалі, нам потрібно надсилати деякі дані про автентифікацію в кожному запиті (cookie, маркер ....). Я знаю три широко використовувані механізми для аутентифікації користувача
Токен з HTTPS. Я використовував такий підхід багато разів, він досить хороший з HTTPS. Якщо користувач надає правильний пароль та логін, він отримає маркер у відповідь та використовуватиме його для подальших запитів. Токен генерується сервером і зберігається, наприклад, в окремій таблиці або там же, де зберігається інформація про користувача. Отже, для кожного сервера запитів перевіряється, чи користувач має маркер, і він такий, як у базі даних. Все досить просто.
JWT Token. Цей маркер є самоописовим, він містить всю необхідну інформацію про сам маркер, користувач не може змінити, наприклад, дату закінчення терміну дії чи будь-яку іншу претензію, оскільки цей маркер генерується (підписується) сервером із секретним ключовим словом. Це також зрозуміло. Але одна велика проблема, особисто для мене, як визнати недійсним маркер.
OAuth 2. Я не розумію, чому цей підхід слід використовувати, коли зв'язок встановлюється безпосередньо між сервером і клієнтом. Наскільки я розумію, сервер OAuth використовується для видачі маркера з обмеженою сферою, щоб інші програми могли отримувати доступ до інформації користувача без збереження пароля та входу. Це відмінне рішення для соціальних мереж, коли користувач хоче зареєструватися на якійсь сторінці, сервер може вимагати дозволу на отримання інформації про користувача, наприклад, з твіттера або facebook, а також заповнення реєстраційних полів даними користувачів тощо.
Розглянемо мобільний клієнт для інтернет-магазину.
Перше питання, чи слід віддати перевагу JWT над маркером першого типу? Наскільки мені потрібен користувач для входу / виходу на мобільному клієнті, мені потрібно десь зберігати маркер або у випадку JWT, маркер повинен бути недійсним під час виходу. Для визнання недійсним токеном одного із значень використовуються різні підходи для створення недійсного списку токенів (чорний список). Хм. Таблиця / файл матиме набагато більший розмір, ніж якби маркер зберігався в таблиці та асоціювався з користувачем, а просто видалявся під час виходу.
То які переваги JWT-токена?
Друге питання про OAuth, чи варто використовувати його у випадку прямого спілкування зі своїм сервером? Яка мета ще одного шару між клієнтом і сервером лише видавати маркер, але спілкування буде не з сервером oauth, а з основним сервером. Як я розумію, сервер OAuth відповідає лише за надання стороннім програмам дозволів (жетонів) для доступу до приватної інформації користувача. Але мій додаток для мобільних клієнтів не є стороннім.