Руководство по концепции связывания OAuth

Тип связи OAuth поддерживает два стандартных потока OAuth 2.0: неявный поток и поток кода авторизации . В неявном потоке кода Google открывает конечную точку авторизации в браузере пользователя. После успешного входа вы возвращаете в Google долгосрочный токен доступа. Этот токен доступа затем включается в каждый запрос, отправляемый Ассистентом к вашему действию.

Привязка OAuth – рекомендуемое решение для связывания учетных записей, если применимо следующее:

  • У вас есть существующая реализация сервера OAuth 2.0, и вы не можете расширить конечную точку обмена токенами, чтобы добавить поддержку протоколов Google для автоматического связывания и создания учетной записи на основе идентификационного токена (т. е. добавить параметры intent=get и intent=create в запросы). до этой конечной точки).

Чтобы убедиться, что привязка OAuth является для вас подходящим решением, см. страницу «Выберите тип привязки учетной записи ».

Ключевые термины

Прежде чем читать о том, как работает связывание OAuth, ознакомьтесь со следующими терминами:

  • user.verificationStatus : свойство, установленное системой, чтобы указать, есть ли в текущем сеансе проверенный пользователь.

  • user.accountLinkingStatus : свойство, установленное системой, чтобы указать, имеет ли пользователь в текущем сеансе связанное удостоверение.

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

  • Поток кода авторизации. Во время этого потока OAuth 2.0 Google открывает конечную точку авторизации в браузере пользователя. Если вход успешен, ваш сервис создает код авторизации и возвращает его в Google. Google отправляет этот код авторизации на вашу конечную точку обмена токенами, которая проверяет подлинность кода и возвращает токен доступа и токен обновления.

    Для этого потока требуются две конечные точки:

    • Конечная точка авторизации: конечная точка, которая отвечает за поиск или получение согласия пользователей на доступ к данным. Эта конечная точка выполняет следующие действия:
      1. Предоставляет пользовательский интерфейс входа пользователям, которые еще не вошли в систему.
      2. Записывает согласие на запрошенный доступ в форме кратковременного кода авторизации.
    • Конечная точка обмена токенами. Эта конечная точка используется для получения зашифрованных строк, называемых токенами , которые разрешают пользователю действия получить доступ к вашей службе. Эта конечная точка отвечает за два типа обмена:
      1. Заменяет код авторизации на долгосрочный токен обновления и кратковременный токен доступа. Этот обмен происходит, когда пользователь проходит процедуру привязки учетной записи.
      2. Заменяет долгосрочный токен обновления на кратковременный токен доступа. Этот обмен происходит, когда Google нужен новый токен доступа, поскольку срок действия того, у которого истек срок действия.
  • Неявный поток кода: во время этого потока OAuth 2.0 Google открывает конечную точку авторизации в браузере пользователя. Если вход успешен, вы возвращаете долгосрочный токен доступа в Google. Этот токен доступа затем включается в каждый запрос, отправляемый Ассистентом к вашему действию. Для этого потока требуется только конечная точка авторизации.

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

  • Токен обновления: токен, который заменяется на новый токен доступа после истечения срока действия краткосрочного токена доступа.

Как это работает

В этом разделе описывается общий поток кода авторизации OAuth и неявные потоки. В следующем разделе «Связывание потоков OAuth » описываются различные потоки, которые могут возникать при использовании OAuth.

Поток кода авторизации можно резюмировать следующим образом:

  1. Ваше действие спрашивает пользователя, хотят ли они связать свою учетную запись с вашим сервисом.
  2. После того как пользователь соглашается связать аккаунты, Google открывает конечную точку авторизации в браузере пользователя. Если поток для действия запускается на голосовом устройстве, Google перенесет выполнение на телефон.
  3. Пользователь входит в систему (если он еще не вошел в систему) и предоставляет Google разрешение на доступ к своим данным с помощью вашего API (если он еще не предоставил разрешение).
  4. Ваш сервис создает код авторизации и возвращает его в Google, перенаправляя браузер пользователя обратно в Google с прикрепленным к запросу кодом авторизации.
  5. Google отправляет код авторизации в конечную точку обмена токенами, которая проверяет подлинность кода и возвращает токен доступа и токен обновления . Токен доступа — это недолговечный токен, который ваша служба принимает в качестве учетных данных для доступа к API. Токен обновления — это долгосрочный токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока их действия.
  6. После того как пользователь завершил процесс привязки учетной записи, каждый последующий запрос, отправленный из Ассистента на ваш веб-перехватчик выполнения, содержит токен доступа.

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

  1. Ваше действие спрашивает пользователя, хотят ли они связать свою учетную запись с вашим сервисом.
  2. После того как пользователь соглашается связать аккаунты, Google открывает конечную точку авторизации в браузере пользователя.
  3. Пользователь входит в систему (если он еще не вошел в систему) и предоставляет Google разрешение на доступ к своим данным с помощью вашего API (если он еще не предоставил разрешение).
  4. Ваша служба создает токен доступа и возвращает его в Google, перенаправляя браузер пользователя обратно в Google с прикрепленным к запросу токеном доступа.
  5. После того как пользователь завершил процесс привязки аккаунта, Google вызывает API вашей службы и прикрепляет токен доступа к каждому запросу. Ваша служба проверяет, что токен доступа предоставляет Google авторизацию для доступа к API, а затем выполняет вызов API.

Основной поток кода авторизации выглядит следующим образом:

  1. Ваше действие спрашивает пользователя, хотят ли они связать свою учетную запись с вашим сервисом.
  2. После того как пользователь соглашается связать аккаунты, Google открывает конечную точку авторизации в браузере пользователя. Если поток для действия запускается на голосовом устройстве, Google перенесет выполнение на телефон.
  3. Пользователь входит в систему (если он еще не вошел в систему) и предоставляет Google разрешение на доступ к своим данным с помощью вашего API (если он еще не предоставил разрешение).
  4. Ваша служба создает код авторизации и возвращает его в Google, перенаправляя браузер пользователя обратно в Google с прикрепленным к запросу кратковременным кодом авторизации.
  5. Google отправляет код авторизации в конечную точку обмена токенами, которая проверяет подлинность кода и возвращает токен доступа и токен обновления . Токен доступа — это недолговечный токен, который ваша служба принимает в качестве учетных данных для доступа к API. Токен обновления — это долгосрочный токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока их действия.
  6. После того как пользователь завершил процесс привязки учетной записи, каждый последующий запрос, отправленный из Ассистента на ваш веб-перехватчик выполнения, содержит токен доступа.

OAuth, связывающий потоки

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

Каждый поток содержит следующие общие шаги после того, как пользователь вызывает ваше действие:

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

Потоки после этого момента различаются в зависимости от того, реализовали ли вы неявный поток или поток кода авторизации. Эти потоки описаны в следующих разделах.

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

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

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

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

Этот код авторизации отправляется в конечную точку обмена токенами, которая возвращает как токен доступа, так и токен обновления. На этом этапе личность пользователя в вашем действии связана с любой учетной записью, под которой он вошел в систему, и каждый последующий запрос, отправленный Ассистентом на ваше выполнение, содержит токен доступа.