Какие знаешь способы авторизации

Ответ

  1. Cookie-based Auth
    Сервер создает сессию и отправляет cookie с session ID. Пример:
    // Серверная часть (Express)
    app.post('/login', (req, res) => {
      req.session.userId = user.id; // Сессия создается
      res.send('Logged in');
    });
  1. Token-based Auth (JWT)
    Сервер генерирует токен, клиент хранит его (обычно в localStorage). Пример:
    // Клиент
    localStorage.setItem('token', 'eyJhbGci...');
    // Запросы с заголовком
    headers: { 'Authorization': 'Bearer ' + token }
  1. OAuth/OAuth2
    Делегирование авторизации через провайдеров (Google, GitHub). Используется для SSO.

  2. Basic Auth
    Логин/пароль в заголовке (base64-encoded). Устаревший, небезопасный без HTTPS.

  3. 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 — сложен в настройке, зато пользователи не орут "опять регистрироваться?!". Выбирай, смотря какая задача. Главное — не уподобляйся тому Герасиму, который сразу мочить полез. Сначала подумай, ебушки-воробушки.