freeCodeCamp/guide/russian/security/oauth2/index.md

10 KiB
Raw Blame History

title localeTitle
OAuth2 Protocol Протокол OAuth2

OAuth 2.0

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

OAuth широко используется во многих крупных интернет-компаниях, таких как Google, Facebook, Slack и т. Д.

Оглавление

  • Базовые знания
  • Поток протокола
  • Типы разрешений авторизации
  • Рекомендации

Базовые знания

Роли

  • Владелец ресурса : Лицо, использующее продукт или услугу (например: владелец ресурса в своем аккаунте Google)
  • Сервер ресурсов : Сервер, на котором хранятся данные, защищенные клиентами (например, Gmail, на котором размещаются ваши электронные письма)
  • Клиент : Приложение, запрашивающее доступ к данным на сервере ресурсов
  • Сервер авторизации : Сервер, который обрабатывает запрос авторизации, выдаёт маркер доступа запрашивающему клиенту. Этот сервер может быть таким же, как сервер ресурсов, или может быть отдельным сервером

Лексемы

В OAuth 2.0 есть два типа токенов

  • Токен доступа : Токены доступа являются важной частью OAuth, поскольку он позволяет получать доступ к пользовательским данным из любого приложения, которое содержит этот токен. Этот токен имеет ограниченный срок службы, определенный сервером авторизации.
  • Обновить токен : Этот токен выдается как часть токена доступа, поскольку токен доступа имеет ограниченный срок службы, иногда клиентскому приложению требуется доступ к пользовательским данным в течение более длительного времени (например, услуги интеграции), в этом случае клиентское приложение может запросить токен обновления, который позволяет им чтобы обновить токен доступа, чтобы получить более новый, который требует повторного авторизации пользователя.

Область доступа к токену

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

Поток протокола

Протокол OAuth2

Типы разрешений авторизации

OAuth2 определил 4 типа грантов для получения токенов доступа в зависимости от характера клиента.

  • Код авторизации
  • Неявный поток
  • Учетные данные владельца ресурса
  • Учетные данные клиента

Грант авторизационного кода

Характер клиента:

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

Например: запрос веб-приложения для доступа к информации пользователя учетной записи Google

Абстрактный поток

Поток кода авторизации

Пример кода:

запрос авторизации

GET /oauth2/authorize?response_type=code 
 &client_id=client123&scope=profile 
 &redirect_uri=https://client.com/callback HTTP/1.1 
 Host: auth.server.com 
HTTP/1.1 302 Found 
 Location: https://client.com/callback#code=sb8s6doy9bsd9sd&state=abcde 

после получения авторизационного кода, запрос на авторизационный сервер с кодом,

POST /oauth2/token HTTP/1.1 
 Host: auth.server.com 
 Content-Type: application/x-www-form-urlencoded 
 
 grant_type=authorization_code 
 &code=sb8s6doy9bsd9sd 
 &redirect_uri=https://client.com/callback 
 &client_id=client123 
 &client_secret=secret 
 &scope=profile 

ответ

HTTP/1.1 200 OK 
 Content-Type: application/json;charset=UTF-8 
 Cache-Control: no-store 
 Pragma: no-cache 
 { 
  "access_token":"gsi8d6fosb9d6fos6df", 
  "token_type":"bearer", 
  "expires_in":3600 
 } 

Неявный поток

Характер клиента:

Клиентское приложение, запущенное в браузере, обычно использует внешние приложения (например: SPA). Этот грант не выдает токен обновления.

Например: внешнее приложение javascript, запущенное в браузере

Абстрактный поток:

Поток кода авторизации

Образец кода:

GET /oauth2/authorize?response_type=token 
 &client_id=client123 
 &redirect_uri=https://client.com/callback HTTP/1.1 
 Host: auth.server.com 
HTTP/1.1 302 Found 
 Location: https://client.com/callback#access_token=98y2b38&token_type=bearer&expires_in=3600&state=abcde 

Учетные данные владельца ресурса

Характер клиента:

В этом потоке владелец ресурса делит свои учетные данные (пароль) с клиентом, а затем на сервер авторизации, поэтому этот грант используется, когда они являются абсолютным доверием между клиентским приложением и сервером авторизации. Таким образом, этот поток в основном не разрешен для сторонних клиентских приложений.

Например: мобильные приложения Facebook, используя этот поток для авторизации с помощью Facebook Server

Абстрактный поток:

Учетные данные владельца ресурса

Образец кода:

POST /oauth2/token HTTP/1.1 
 Host: auth.server.com 
 Content-Type: application/x-www-form-urlencoded 
 
 grant_type=password 
 &username=john 
 &password=abcde 

Поток клиентских учетных данных

Характер клиента:

Этот тип авторизации используется, когда клиент сам является владельцем ресурса (т.е. клиент хочет получить доступ к своему пределу использования или связанной с ним информации). В этом потоке нет авторизации конечного пользователя.

Например: клиентское приложение, запрашивающее данные не пользователей с серверов google (например: часовые пояса, карты и т. Д.),

Абстрактный поток:

Учетные данные клиента

Образец кода:

POST /oauth2/token HTTP/1.1 
 Host: auth.server.com 
 Content-Type: application/x-www-form-urlencoded 
 
 grant_type=client_credentials 
 &client_id=client123 
 &client_secret=xyz123 

Рекомендации

Для получения дополнительной информации см.