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

Поток OAuth 2.0

Oauth2.0 FlowOAuth работает в несколько шагов.

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

б. Если владелец говорит «да», первый веб-сайт получает специальный код, который называется «предоставление авторизации».

в. Затем первый веб-сайт использует этот код для запроса «токена доступа» с сервера авторизации исходного веб-сайта.

д. Сервер проверяет, все ли в порядке, а затем дает первому веб-сайту токен доступа и «токен обновления».

е. Затем первый веб-сайт может использовать токен доступа для запроса конкретной информации с исходного веб-сайта.

ф. Исходный веб-сайт проверяет, является ли токен доступа реальным, и, если это так, передает информацию первому веб-сайту.

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

Необходим маркер обновления

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

Пример потока

В следующем пошаговом примере показано использование потока кода авторизации.

Приложение инициирует запрос авторизации

Чтобы начать использовать OAuth, приложение создает ссылку со своим идентификатором клиента, областью действия, состоянием и верификатором кода и помещает ее в ссылку на веб-сайт. Когда кто-то нажимает на него, запускается OAuth.

<a href="https://authorization-server.com/oauth/authorize
?response_type=code&client_id=mRkZGFjM&state=5ca75bd30
&scope=photos
&code_challenge_method=S256
&code_challenge=hKpKupTM391pE10xfQiorMxXarRKAHRhTfH_xkGf7U4">
Connect Your Account</a>

Обратите внимание, что это не вызов HTTP, который делает ваше приложение, а URL-адрес, по которому пользователь щелкнет, чтобы перенаправить свой браузер на сервер OAuth.

Пользователь одобряет запрос

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

Служба перенаправляет пользователя обратно в приложение

Служба отправляет заголовок перенаправления, перенаправляя браузер пользователя обратно в приложение, которое сделало запрос. Перенаправление будет включать «код» в URL-адрес и исходное «состояние».

https://example-app.com/cb?code=Yzk5ZDczMzRlNDEwY&state=5ca75bd30

(На самом деле это будет отправлено обратно как HTTP-ответ с сервера авторизации в браузер пользователя, а не в ваше приложение. Фактический HTTP-ответ здесь не показан, поскольку он не имеет значения для кода, который вы напишите в своем заявлении)

Приложение обменивает код аутентификации на токен доступа

Наконец, приложение использует код авторизации для получения токена доступа, отправляя HTTPS-запрос POST к конечной точке токена сервера авторизации.

POST /oauth/token HTTP/1.1
Host: authorization-server.com
 
code=Yzk5ZDczMzRlNDEwY
&grant_type=code
&redirect_uri=https://example-app.com/cb
&client_id=mRkZGFjM
&client_secret=ZGVmMjMz
&code_verifier=Th7UHJdLswIYQxwSg29DbK1a_d9o41uNMTRmuH0PM8zyoMAQ

Когда приложение хочет использовать OAuth, оно отправляет запрос на сервер для токена доступа, который позволяет ему получить доступ к ресурсам сервера. Сервер проверяет запрос и возвращает токен доступа, срок действия которого истекает. Если срок действия токена истекает, сервер может также отправить токен обновления, который приложение может использовать для получения нового токена доступа. Это помогает обеспечить безопасность конфиденциальных данных, гарантируя, что токены не будут храниться вечно.

Ответ:

{
  "access_token": "AYjcyMzY3ZDhiNmJkNTY",
  "refresh_token": "RjY2NjM5NzA2OWJjuE7c",
  "token_type": "Bearer",
  "expires": 3600
}