OAuth 1 и 2 авторизация сущность и примеры

Лекция 13 мин.



Привет, Вы узнаете о том , что такое oauth, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое oauth , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

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

Главная идея OAuth1

Приложение получает токен доступа
вместо логина и пароля пользователя.

Ниже — последовательность работы OAuth 1.0.

Последовательность авторизации OAuth 1.0

1. Регистрация приложения

Разработчик регистрирует приложение у провайдера.

Приложение получает:

  • Consumer Key (идентификатор клиента)
  • Consumer Secret (секрет клиента)

Это аналог client_id / client_secret.

2. Получение Request Token

Приложение отправляет запрос провайдеру:

POST /oauth/request_token

Передаются:

  • consumer_key
  • подпись (HMAC-SHA1)
  • timestamp
  • nonce
  • callback_url

Ответ:

oauth_token=REQUEST_TOKEN
oauth_token_secret=REQUEST_SECRET

Этот токен еще не авторизован пользователем.

3. Перенаправление пользователя

Пользователь отправляется на страницу авторизации провайдера.

 https://provider.com/oauth/authorize?oauth_token=REQUEST_TOKEN

Пользователь:

  1. логинится
  2. подтверждает доступ

4. Callback в приложение

После подтверждения провайдер делает redirect:

callback_url?oauth_token=REQUEST_TOKEN&oauth_verifier=VERIFIER

Приложение получает:

  • oauth_token
  • oauth_verifier

5. Обмен Request Token → Access Token

Приложение отправляет запрос:

 POST /oauth/access_token

Передаются:

  • consumer_key
  • request_token
  • oauth_verifier
  • подпись

Ответ:

oauth_token=ACCESS_TOKEN
oauth_token_secret=ACCESS_SECRET

6. Доступ к API

Теперь приложение может обращаться к API:

GET /user/profile
Authorization: OAuth ...

Каждый запрос подписывается:

  • consumer_secret
  • access_token_secret

Подпись обычно:

HMAC-SHA1
Упрощенная схема

OAuth 1 и 2 авторизация сущность и примеры

Основные особенности OAuth 1.0

Подпись каждого запроса

Каждый HTTP-запрос подписывается:

  • nonce
  • timestamp
  • consumer_secret
  • token_secret

Это делает запросы криптографически защищенными.

Нет необходимости передавать пароль

Пользователь вводит пароль только на стороне провайдера.

Сложность реализации

OAuth1:

  • сложные подписи
  • много параметров
  • трудно реализовать

Поэтому появился OAuth 2.0.

Алгоритм работы OAuth 2.0


Как и первая версия, OAuth 2.0 основан на использовании базовых веб-технологий: HTTP-запросах, редиректах и т. п. Поэтому использование OAuth возможно на любой платформе с доступом к интернету и браузеру: на сайтах, в мобильных и desktop-приложениях, плагинах для браузеров…

Ключевое отличие от OAuth 1.0 — простота. В новой версии нет громоздких схем подписи, сокращено количество запросов, необходимых для авторизации.

Общая схема работы приложения, использующего OAuth, такова:

  1. получение авторизации
  2. обращение к защищенным ресурсам


Результатом авторизации является access token — некий ключ (обычно просто набор символов), предъявление которого является пропуском к защищенным ресурсам. Обращение к ним в самом простом случае происходит по HTTPS с указанием в заголовках или в качестве одного из параметров полученного access token'а.

В протоколе описано несколько вариантов авторизации, подходящих для различных ситуаций:

  • авторизация для приложений, имеющих серверную часть (чаще всего, это сайты и веб-приложения)
  • авторизация для полностью клиентских приложений (мобильные и desktop-приложения)
  • авторизация по логину и паролю
  • восстановление предыдущей авторизации

Авторизация для приложений, имеющих серверную часть


OAuth 1 и 2 авторизация сущность и примеры

  1. Редирект на страницу авторизации
  2. На странице авторизации у пользователя запрашивается подтверждение выдачи прав
  3. В случае согласия пользователя, браузер редиректится на URL, указанный при открытии страницы авторизации, с добавлением в GET-параметры специального ключа — authorization code
  4. Сервер приложения выполняет POST-запрос с полученным authorization code в качестве параметра. В результате этого запроса возвращается access token


Это самый сложный вариант авторизации, но только он позволяет сервису однозначно установить приложение, обращающееся за авторизацией (это происходит при коммуникации между серверами на последнем шаге). Во всех остальных вариантах авторизация происходит полностью на клиенте и по понятным причинам возможна маскировка одного приложения под другое. Об этом говорит сайт https://intellect.icu . Это стоит учитывать при внедрении OAuth-аутентификации в API сервисов.

Пример


Здесь и далее примеры приводятся для API intellect.icu, но логика одинаковая для всех сервисов, меняются только адреса страниц авторизации. Обратите внимание, что запросы надо делать по HTTPS.

Редиректим браузер пользователя на страницу авторизации:

> GET /oauth/authorize?response_type=code&client_id=1111&
      redirect_uri=http%3A%2F%2Fintellect.icu%2Fcb%2F123 HTTP/1.1
> Host: connect.intellect.icu


Здесь и далее, client_id и client_secret — значения, полученные при регистрации приложения на платформе.

После того, как пользователь выдаст права, происходит редирект на указанный redirect_uri:

< HTTP/1.1 302 Found
< Location: http://example.com/cb/123?code=gfjfgjgfjb0y



Обратите внимание, если вы реализуете логин на сайте с помощью OAuth, то рекомендуется в redirect_uri добавлять уникальный для каждого пользователя идентификатор для предотвращения CSRF-атак (в примере это 123). При получении кода надо проверить, что этот идентификатор не изменился и соответствует текущему пользователю.

Используем полученный code для получения access_token, выполняя запрос с сервера:

> POST /oauth/token HTTP/1.1
> Host: connect.intellect.icu
> Content-Type: application/x-www-form-urlencoded
> 
> grant_type=authorization_code&client_id=49&client_secret=dgfhfgef&code=gfjfgjgfjb0y&
  redirect_uri=http%3A%2F%2Fexample.com%2Fcb%2F123

< HTTP/1.1 200 OK
< Content-Type: application/json
<
< {
<    "access_token":"tfrtgu",
<    "token_type":"bearer",
<    "expires_in":86400,
<    "refresh_token":"thdtthTDHtrht",
< }



Обратите внимание, что в последнем запросе используется client_secret, который в данном случае хранится на сервере приложения, и подтверждает, что запрос не подделан.

В результате последнего запроса получаем сам ключ доступа (access_token), время его «протухания» (expires_in), тип ключа, определяющий как его надо использовать, (token_type) и refresh_token о котором будет подробнее сказано ниже. Дальше, полученные данные можно использовать для доступа к защищенным ресурсам, например, API intellect.icu:

> GET /platform/api?oauth_token=tbhuiGDSGGGg76rf&client_id=5119&format=json&method=users.getInfo&
      sig=... HTTP/1.1
> Host: apps.intellect.icu


Описание в спецификации

Авторизация полностью клиентских приложений


OAuth 1 и 2 авторизация сущность и примеры

  1. Открытие встроенного браузера со страницей авторизации
  2. У пользователя запрашивается подтверждение выдачи прав
  3. В случае согласия пользователя, браузер редиректится на страницу-заглушку во фрагменте (после #) URL которой добавляется access token
  4. Приложение перехватывает редирект и получает access token из адреса страницы


Этот вариант требует поднятия в приложении окна браузера, но не требует серверной части и дополнительного вызова сервер-сервер для обмена authorization code на access token.

Пример


Открываем браузер со страницей авторизации:

> GET /oauth/authorize?response_type=token&client_id=454119 HTTP/1.1
> Host: connect.intellect.icu



После того, как пользователь выдаст права, происходит редирект на стандартную страницу-заглушку, для intellect.icu это connect.intellect.icu/oauth/success.html:

< HTTP/1.1 302 Found
< Location: http://connect.intellect.icu/oauth/success.html#access_token=jhgbujgjyhg&token_type=bearer&
            expires_in=16400&refresh_token=thdtthTDHtrht



Приложение должно перехватить последний редирект, получить из адреса acess_token и использовать его для обращения к защищенным ресурсам.

Авторизация по логину и паролю


Авторизация по логину и паролю представляет простой POST-запрос, в результате которого возвращается access token. Такая схема не представляет из себя ничего нового, но вставлена в стандарт для общности и рекомендуется к применению только, когда другие варианты авторизации не доступны.

Пример

> POST /oauth/token HTTP/1.1
> Host: connect.intellect.icu
> Content-Type: application/x-www-form-urlencoded
> 
> grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.intellect.icu&
  password=qwerty

< HTTP/1.1 200 OK
< Content-Type: application/json
<
< {
<    "access_token":"hgfvyfyujfygjftyf32",
<    "token_type":"bearer",
<    "expires_in":96400,
<    "refresh_token":"thdtthTDHtrht",
< }

Восстановление предыдущей авторизации


Обычно, access token имеет ограниченный срок годности. Это может быть полезно, например, если он передается по открытым каналам. Чтобы не заставлять пользователя проходить авторизацию после истечения срока действия access token'а, во всех перечисленных выше вариантах, в дополнение к access token'у может возвращаться еще refresh token. По нему можно получить access token с помощью HTTP-запроса, аналогично авторизации по логину и паролю.

Пример

> POST /oauth/token HTTP/1.1
> Host: connect.intellect.icu
> Content-Type: application/x-www-form-urlencoded
> 
> grant_type=refresh_token&client_id=31337&client_secret=dfhdfhdfhdfh&refresh_token=thdtthTDHtrht

< HTTP/1.1 200 OK
< Content-Type: application/json
<
< {
<    "access_token":"JRTr5677",
<    "token_type":"bearer",
<    "expires_in":86400,
<    "refresh_token":"thdtthTDHtrht",
< }

Что такое OAuth 2.0

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

Главная идея:
пользователь разрешает приложению доступ через доверенный сервер авторизации.

Пример:
Вы входите в сайт через Google / GitHub / Facebook — сайт не получает ваш пароль, а получает access token.

Назначение OAuth2

Основные цели протокола:

  1. Безопасность
    пароль пользователя не передается стороннему приложению.
  2. Делегирование доступа
    пользователь может разрешить доступ только к определенным данным (scope).
  3. Контроль доступа
    пользователь может отозвать разрешение.
  4. Стандартизированная авторизация API

Участники OAuth2

В процессе участвуют 4 роли:

Роль Описание
Resource Owner пользователь
Client приложение (сайт / мобильное приложение)
Authorization Server сервер авторизации
Resource Server API с защищенными данными

3 схемы OAuth2 :

1 Полная схема OAuth2 Authorization Code
2 OAuth2 + PKCE (как в SPA)
3 OAuth2 + JWT токены

OAuth 1 и 2 авторизация сущность и примеры

OAuth 1 и 2 авторизация сущность и примеры

Последовательность авторизации OAuth2 (Authorization Code Flow)

Это самый распространенный и безопасный flow.

1. Пользователь открывает приложение

Клиент отправляет пользователя на Authorization Server.

GET /authorize
client_id=123
redirect_uri=https://client.app/callback
response_type=code
scope=profile email

2. Пользователь проходит аутентификацию

На сервере авторизации пользователь:

  • вводит логин/пароль
  • подтверждает доступ

3. Сервер возвращает Authorization Code

После подтверждения пользователь перенаправляется обратно:

https://client.app/callback?code=AUTH_CODE

4. Клиент получает Access Token

Клиент отправляет запрос на сервер авторизации:

POST /token
grant_type=authorization_code
code=AUTH_CODE
client_id=123
client_secret=abc

Ответ:

{
"access_token": "TOKEN",
"refresh_token": "REFRESH",
"expires_in": 3600
}

5. Клиент обращается к API

Теперь приложение может обращаться к Resource Server:

GET /user/profile
Authorization: Bearer ACCESS_TOKEN

Что такое Access Token

Access Token — это ключ доступа к API.

Обычно:

  • JWT
  • строка случайных символов

Он имеет:

  • срок жизни
  • набор разрешений (scope)

Refresh Token

Если Access Token истек, используется Refresh Token:

POST /token
grant_type=refresh_token
refresh_token=XXXX

Основные Grant Types OAuth2

Тип Назначение
Authorization Code веб-приложения
PKCE SPA и мобильные приложения
Client Credentials сервер-сервер
Device Code

устройства без браузера

Коротко:

OAuth2 — это протокол делегированной авторизации, который позволяет приложению получать доступ к данным пользователя через access token, не раскрывая пароль.

Сравнение OAuth 1.0 и OAuth 2.0

OAuth 1.0 OAuth 2.0
Подпись HMAC-SHA1 обычно нет
Токены request + access access + refresh
Сложность высокая проще
Безопасность криптоподписи HTTPS
сложная криптография проще
подписи запросов access token
сложная реализация проще внедрить

Вау!! 😲 Ты еще не читал? Это зря!

Исследование, описанное в статье про oauth, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое oauth и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

создано: 2026-04-09
обновлено: 2026-05-11
1



Помог ли вам этот ответ?
Нажмите оценку и напишите коротко почему. Так мы сможем сделать следующие ответы точнее и полезнее.
Насколько вы довольны ответом?
Ваш отзыв напрямую влияет на качество следующих подсказок и ответов.


Поделиться:
Пожаловаться

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выполнения задания
  • Возможно применение функции гаранта на сделку
  • Приоритетная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можете продать (как исполнитель) или купить (как заказчик) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно применение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии

Оставить комментарий

Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Лекции и учебник по "Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) "

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)