Что такое OAuth 2.0

Ответ

OAuth 2.0 — это протокол авторизации, позволяющий приложениям получать ограниченный доступ к данным пользователя на других сервисах без передачи логина и пароля.

Основные роли:

  • Resource Owner — пользователь
  • Client — приложение, запрашивающее доступ
  • Authorization Server — сервис, выдающий токены (например, Google, Facebook)
  • Resource Server — API, защищающее данные

Типы потоков (grant types):

  1. Authorization Code — для серверных приложений
  2. Implicit (устарел) — для SPA
  3. Client Credentials — для сервис-сервис авторизации
  4. Refresh Token — обновление токена

Пример запроса кода авторизации:

const authUrl = `https://auth-server.com/authorize?
  response_type=code&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read_profile`;

OAuth 2.0 использует токены (access_token, refresh_token) вместо паролей, что безопаснее.

Ответ 18+ 🔞

Давай разберём этот ваш OAuth 2.0, а то как послушаешь — кажется, что там ядерная физика, а на деле проще пареной репы, если вникнуть.

Представь, ты заходишь в приложение «Фотки от Васёчка», и оно такое: «Хочу твои фотки из Инстаграмма!». Раньше бы пришлось отдавать логин и пароль, а это, простите, как отдать ключи от квартиры первому встречному бомжу. Пиздец, а не безопасность.

Так вот, OAuth 2.0 — это такой протокол, который позволяет приложению легально подлизаться к твоим данным на другом сервисе, но без твоего пароля. Красота же!

Кто тут главные по тарелкам:

  • Resource Owner (Владелец ресурса) — это ты, пользователь, со своими фотками, письмами и прочим цифровым добром.
  • Client (Клиент) — это то самое приложение-нахлебник («Фотки от Васёчка»), которое охочее до твоих данных.
  • Authorization Server (Сервер авторизации) — это, типа, главный вышибала и бюрократ в одном лице (например, сервера Google или Facebook). Он решает, пускать или нет, и выдает пропуска.
  • Resource Server (Сервер ресурсов) — это уже конкретный склад с данными (API Инстаграмма), который охраняется этими пропусками.

А теперь про «потоки» (grant types), это как разные способы пролезть на тусовку:

  1. Authorization Code (Код авторизации) — классика для взрослых. Для приложений, у которых есть свой сервер (бэкенд). Самый безопасный, потому что токен сразу на сервер идёт, а не болтается в браузере.
  2. Implicit (Неявный) — этот, вроде как, для одностраничных приложений (SPA), но его сейчас все хают и считают устаревшим, потому что токен может светиться в адресной строке. Доверие к нему — ноль ебать.
  3. Client Credentials (Учетные данные клиента) — когда два сервиса между собой договариваются, без участия живого юзера. Типа, «я — микросервис А, пусти меня к API микросервиса Б».
  4. Refresh Token (Токен обновления) — это не отдельный поток, а такая хитрая жопа. У access_token жизнь короткая, а refresh_token живёт дольше и может выпросить новый access_token, когда старый сдохнет. Удобно, чтобы пользователя каждый час не гонять по новой.

Вот смотри, как обычно начинается этот цирк (запрос кода):

const authUrl = `https://auth-server.com/authorize?
  response_type=code&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read_profile`;

Объясняю на пальцах: приложение формирует ссылку, ты по ней кликаешь, тебя перекидывает к вышибале (Authorization Server), а тот спрашивает: «Чувак, приложение «Васёчек» хочет доступ к твоему профилю. Пущай?». Ты говоришь «Ага», и тебя с кодом (не токеном ещё!) отправляют обратно в приложение. А уж потом это приложение тихонечко, со своей закрытой стороны, меняет этот код на настоящий access_token.

И вся фишка в том, что работа идёт с этими самыми токенами, а пароль твой остаётся при тебе. Безопаснее, удобнее. В общем, не протокол, а ебушки-воробушки! Главное — потоки не перепутать, а то получится пиздопроебина вместо авторизации.