Руководство по миграции потоков IP-адресов Loopback

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Обзор

16 февраля 2022 г. мы объявили о планах сделать взаимодействия Google OAuth более безопасными за счет использования более безопасных потоков OAuth. Это руководство поможет вам понять необходимые изменения и шаги для успешного перехода от потока IP-адресов обратной связи к поддерживаемым альтернативам.

Эта попытка является защитной мерой от фишинговых атак и атак с использованием олицетворения приложений во время взаимодействия с конечными точками авторизации Google OAuth 2.0.

Что такое поток IP-адреса Loopback?

Поток петлевого IP-адреса поддерживает использование петлевого IP-адреса или localhost хоста в качестве компонента узла URI перенаправления, на который отправляются учетные данные после того, как пользователь одобрит запрос согласия OAuth. Этот поток уязвим для атак «человек посередине », когда вредоносное приложение, получающее доступ к тому же петлевому интерфейсу в некоторых операционных системах, может перехватить ответ сервера авторизации на заданный URI перенаправления и получить доступ к коду авторизации.

Поток замыкания на себя IP-адреса устарел для собственных типов клиентов OAuth для iOS, Android и Chrome, но по-прежнему будет поддерживаться в настольных приложениях.

Ключевые даты соответствия

  • 14 марта 2022 г. — новым клиентам OAuth заблокировано использование потока IP-адресов Loopback.
  • 1 августа 2022 г. — для несоответствующих запросов OAuth может отображаться предупреждающее сообщение для пользователя.
  • 31 августа 2022 г. — поток IP-адресов Loopback заблокирован для собственных клиентов OAuth для Android, приложений Chrome и iOS, созданных до 14 марта 2022 г.

Предупреждающее сообщение для пользователя может отображаться для несоответствующих запросов за месяц до того, как, например, 1 августа 2022 г., поток IP-адресов Loopback полностью устарел. Сообщение будет информировать пользователей о том, что приложение может быть заблокировано в ближайшее время, при отображении электронного письма поддержки, которое вы зарегистрировали на экране согласия OAuth в Google API Console .

Вы можете подтвердить предупреждающее сообщение для пользователя и подавить его, передав параметр запроса в вызове авторизации, как показано ниже.
  • Перейдите к коду в своем приложении, где вы отправляете запросы к конечной точке авторизации Google OAuth 2.0 .
  • Добавьте параметр ack_loopback_shutdown со значением даты вступления в силу: 2022-08-31 в запрос потока перенаправления. Пример:
    ack_oob_shutdown=2022-08-31
Чтобы пройти процесс миграции, необходимо выполнить два основных шага:
  1. Определите, затронуты ли вы.
  2. Перейдите на поддерживаемую альтернативу, если вы пострадали.

Определите, затронуты ли вы

Проверьте тип идентификатора клиента OAuth.

Перейдите к Credentials page в Google API Console и просмотрите свой тип идентификатора клиента OAuth в разделе « Идентификаторы клиента OAuth 2.0 ». Это может быть любое из следующих приложений: веб-приложение , Android , iOS , универсальная платформа Windows (UWP) , приложение Chrome , телевизоры и ограниченные устройства ввода , настольное приложение .

Перейдите к следующему шагу, если типом вашего клиента является Android, приложение Chrome или iOS, и вы используете поток IP-адреса замыкания на себя.

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

Как определить, использует ли ваше приложение петлевой поток IP-адресов

Проверьте код своего приложения или исходящий сетевой вызов (если ваше приложение использует библиотеку OAuth), чтобы определить, использует ли запрос авторизации Google OAuth, который делает ваше приложение, значения URI перенаправления обратной связи.

Проверьте код вашего приложения

Просмотрите раздел кода вашего приложения, в котором вы совершаете вызовы к конечным точкам авторизации Google OAuth, и определите, имеет ли параметр redirect_uri какое-либо из следующих значений:
  • redirect_uri=http://127.0.0.1: <port> например redirect_uri=http://127.0.0.1: 3000
  • redirect_uri=http://[::1]: <port> например redirect_uri=http://[::1]: 3000
  • redirect_uri=http://localhost: <port> например redirect_uri=http://localhost: 3000
Пример запроса потока перенаправления IP-адреса обратной связи будет выглядеть следующим образом:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Проверка исходящего сетевого вызова

Способ проверки сетевых вызовов зависит от типа клиента вашего приложения.
При проверке сетевых вызовов найдите запросы, отправленные на конечные точки авторизации Google OAuth, и определите, имеет ли параметр redirect_uri одно из следующих значений:
  • redirect_uri=http://127.0.0.1: <port> например redirect_uri=http://127.0.0.1: 3000
  • redirect_uri=http://[::1]: <port> например redirect_uri=http://[::1]: 3000
  • redirect_uri=http://localhost: <port> например redirect_uri=http://localhost: 3000
Пример запроса потока перенаправления IP-адреса loopback будет выглядеть следующим образом:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Переход на поддерживаемую альтернативу

Мобильные клиенты (Android/iOS)

Если вы определили, что ваше приложение использует поток IP-адресов замыкания на себя с типом клиента OAuth для Android или iOS, вам следует перейти на использование наших мобильных SDK для входа в Google ( Android , iOS ).

SDK упрощает доступ к API Google и обрабатывает все вызовы к конечным точкам авторизации Google OAuth 2.0.

Ссылки на документацию ниже содержат информацию о том, как использовать SDK для входа в Google для доступа к API Google без использования URI перенаправления IP-адреса замыкания на себя.

Доступ к API Google на Android

Серверный (автономный) доступ
В приведенном ниже примере показано, как получить доступ к API Google на стороне сервера на Android .
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
  GoogleSignInAccount account = task.getResult(ApiException.class);
  
  // request a one-time authorization code that your server exchanges for an
  // access token and sometimes refresh token
  String authCode = account.getServerAuthCode();
  
  // Show signed-in UI
  updateUI(account);

  // TODO(developer): send code to server and exchange for access/refresh/ID tokens
} catch (ApiException e) {
  Log.w(TAG, "Sign-in failed", e);
  updateUI(null);
}

Ознакомьтесь с руководством по доступу на стороне сервера, чтобы узнать, как получить доступ к API Google со стороны сервера.

Доступ к API Google в приложении для iOS

Доступ на стороне клиента

В приведенном ниже примере показано, как получить доступ к API Google на стороне клиента в iOS .

user.authentication.do { authentication, error in
  guard error == nil else { return }
  guard let authentication = authentication else { return }
  
  // Get the access token to attach it to a REST or gRPC request.
  let accessToken = authentication.accessToken
  
  // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
  // use with GTMAppAuth and the Google APIs client library.
  let authorizer = authentication.fetcherAuthorizer()
}

Используйте токен доступа для вызова API, либо включив токен доступа в заголовок запроса REST или gRPC ( Authorization: Bearer ACCESS_TOKEN ), либо с помощью авторизатора сборщика ( GTMFetcherAuthorizationProtocol ) с клиентской библиотекой API Google для Objective-C . для ОТДЫХА .

Ознакомьтесь с руководством по доступу на стороне клиента, чтобы узнать, как получить доступ к API Google на стороне клиента. о том, как получить доступ к API Google на стороне клиента.

Серверный (автономный) доступ
В приведенном ниже примере показано, как получить доступ к API Google на стороне сервера для поддержки клиента iOS.
GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
  guard error == nil else { return }
  guard let user = user else { return }
  
  // request a one-time authorization code that your server exchanges for
  // an access token and refresh token
  let authCode = user.serverAuthCode
}

Ознакомьтесь с руководством по доступу на стороне сервера, чтобы узнать, как получить доступ к API Google со стороны сервера.

Клиент приложения Chrome

Если вы обнаружите, что ваше приложение использует поток IP-адресов замыкания на себя в клиенте приложения Chrome, вам следует перейти на использование Chrome Identity API .

В приведенном ниже примере показано, как получить все контакты пользователей без использования петлевого IP-адреса перенаправления URI.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {

  
  // retrieve access token
  chrome.identity.getAuthToken({interactive: true}, function(token) {
  
  // ..........


  // the example below shows how to use a retrieved access token with an appropriate scope
  // to call the Google People API contactGroups.get endpoint

  fetch(
    'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
    init)
    .then((response) => response.json())
    .then(function(data) {
      console.log(data)
    });
   });
 });
};

Просмотрите руководство по Chrome Identity API , чтобы получить дополнительную информацию о том, как получить доступ к аутентификации пользователей и вызывать конечные точки Google с помощью Chrome Identity API.