Ответ
- Cookie-based Auth
Сервер создает сессию и отправляет cookie с session ID. Пример:
// Серверная часть (Express)
app.post('/login', (req, res) => {
req.session.userId = user.id; // Сессия создается
res.send('Logged in');
});
- Token-based Auth (JWT)
Сервер генерирует токен, клиент хранит его (обычно в localStorage). Пример:
// Клиент
localStorage.setItem('token', 'eyJhbGci...');
// Запросы с заголовком
headers: { 'Authorization': 'Bearer ' + token }
-
OAuth/OAuth2
Делегирование авторизации через провайдеров (Google, GitHub). Используется для SSO. -
Basic Auth
Логин/пароль в заголовке (base64-encoded). Устаревший, небезопасный без HTTPS. -
API Keys
Статичный ключ в заголовке или URL. Используется для сервер-серверного взаимодействия.
Нюансы:
- JWT не требует сессий, но сложен с инвалидацией.
- Cookies защищены
HttpOnlyиSecure, но уязвимы к CSRF. - OAuth сложен в настройке, но удобен для пользователей.
Ответ 18+ 🔞
А, ну вот, опять про эту вашу авторизацию! Сидишь, блядь, как Герасим немой, а тебе тут целых пять способов, как в систему пролезть, объясняют. Слушай, давай разберём, пока я не начал, как тот мужик, в озеро с мешком прыгать от безысходности.
1. Куки-авторизация, классика, блядь Тут сервер, хитрая жопа, создаёт тебе сессию — типа, "запомнил" тебя. И в ответ суёт куку с каким-то session ID. Ты её, как собачка Муму, таскаешь за собой в каждый запрос. Сервер смотрит на неё и говорит: "А, это Герасим, пускай метёт двор".
// Серверная часть (Express)
app.post('/login', (req, res) => {
req.session.userId = user.id; // Сессия создается
res.send('Logged in');
});
Всё просто, но, блядь, есть нюанс — эти куки могут CSRF-атакам подвергаться. То есть тебя, дурака, могут заставить не то действие сделать. Но их можно защитить флагами HttpOnly и Secure, чтобы они не болтались где попало.
2. Токены, ёпта, JWT
А это модно, молодёжно. Сервер не хранит сессию, а выдаёт тебе бумажку (токен), подписанную своей печатью. Ты её, как пропуск на завод, при каждом входе предъявляешь. Хранишь её обычно в localStorage.
// Клиент
localStorage.setItem('token', 'eyJhbGci...');
// Запросы с заголовком
headers: { 'Authorization': 'Bearer ' + token }
Красота, да? Серверу не надо о тебе помнить. Но вот если токен украдут — пиздец, Колян. Отозвать-то его овердохуища сложно, пока срок годности не кончится. Максимализм, блядь, в чистом виде.
3. OAuth/OAuth2 Это когда ты, ленивая жопа, не хочешь пароль придумывать, а говоришь: "Вот, Гугл (или Гитхаб), я доверяю этому парню, впусти его". Они тебе временный пропуск выдают. Удобно для пользователя — один клик. Для разработчика — настроить это дело, блядь, как танцы с бубном. Но для SSO (единого входа) — самое то.
4. Basic Auth, старый дед Тут ты просто кодируешь логин и пароль в base64 и суёшь в заголовок. Типа "я — Герасим, вот мои документы". Выглядит просто, но, ёпта, это как идти по минному полю без сапёрной лопаты — без HTTPS тебя любого школьника раздербанит. Устарел, как лапти.
5. API Keys, для роботов Статичный ключ, который ты вставляешь в запрос. Используется, когда не пользователь, а одна программа с другой программой общается. Типа "я — служба доставки, вот мой номер курьера". Просто, но если ключ утечёт — волнение ебать, вся твоя API-лавочка накрывается медным тазом.
Итог, блядь:
- JWT — не требует сессий, но с инвалидацией токена головняк, пиздец.
- Куки — защищены
HttpOnlyот XSS, но за CSRF надо отдельно думать. - OAuth — сложен в настройке, зато пользователи не орут "опять регистрироваться?!". Выбирай, смотря какая задача. Главное — не уподобляйся тому Герасиму, который сразу мочить полез. Сначала подумай, ебушки-воробушки.