Мы прекращая Google для входа в систему JavaScript платформенной библиотеки для веб - сайтов . Для проверки подлинности и пользователь входа в систему , использовать новые Google Identity Services SDKs как для Web и Android вместо.

Переход с GoogleAuthUtil и Plus.API

Если вы ранее интегрировались с Google Sign-In с помощью GoogleAuthUtil.getToken или Plus.API , вам следует перейти на новейший Sign-In API для большей безопасности и удобства работы пользователей.

Переход с анти-шаблона токена доступа

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

Например, если ваш код Android выглядит, как в примере ниже, вам следует перенести свое приложение на текущие передовые методы.

Код Android

В примере, маркер доступа запрашивает использовать oauth2: плюс области видимости строку в качестве scope параметра для GoogleAuthUtil.getToken вызова ( oauth2:https://www.googleapis.com/auth/plus.login ).

Вместо аутентификации с помощью токена доступа, полученного с помощью GoogleAuthUtil.getToken , используйте либо поток токенов GoogleAuthUtil.getToken , либо поток кода аутентификации.

Миграция в поток токенов ID

Если все, что вам нужно, это идентификатор пользователя, адрес электронной почты, имя или URL-адрес изображения профиля, используйте поток токенов идентификатора .

Чтобы перейти к потоку идентификаторов токенов, внесите следующие изменения:

Клиентская сторона Android

  • Удалите GET_ACCOUNTS (Контакты), если вы его запрашиваете
  • Переключите любой код с помощью GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() или AccountManager.newChooseAccountIntent() на Auth.GOOGLE_SIGN_IN_API с GoogleSignInOptions.Builder.requestIdToken(...) .

Сторона сервера

Переход на поток кода аутентификации сервера

Если вашему серверу требуется доступ к другим API Google, таким как Google Диск, Youtube или Контакты, используйте поток кода аутентификации сервера .

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

Клиентская сторона Android

  • Удалите GET_ACCOUNTS (Контакты), если вы его запрашиваете
  • Переключите любой код с помощью GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() или AccountManager.newChooseAccountIntent() на Auth.GOOGLE_SIGN_IN_API с GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Сторона сервера

Вы по-прежнему можете использовать логику доступа к API между старыми и новыми конечными точками. Например:

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...);
String accessToken = tokenResponse.getAccessToken();
String refreshToken = tokenResponse.getRefreshToken();
Long expiresInSeconds = tokenResponse.getExpiresInSeconds();

// Shared by your old and new implementation, old endpoint can pass null for refreshToken
private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) {
   GoogleCredential credential = new GoogleCredential.Builder()
           .setTransPort(...)
           ...
           .build();
   credential.setAccessToken(accessToken);
   credential.setExpiresInSeconds(expiresInSeconds);
   credential.setRefreshToken(refreshToken);
}

Миграция из потока токенов идентификатора GoogleAuthUtil

Если вы используете GoogleAuthUtil для получения токенов идентификатора, вам следует перейти на новый поток токенов идентификатора API входа.

Например, если ваш код Android выглядит как в следующем примере, вам следует выполнить миграцию:

Код Android

В этом примере запросы токенов идентификатора используют audience:server:client_id плюс идентификатор клиента для вашего веб-сервера в качестве параметра «scope» для вызова GoogleAuthUtil.getToken ( GoogleAuthUtil.getToken audience:server:client_id:9414861317621.apps.googleusercontent.com ).

Новый поток токенов идентификатора API входа в систему имеет следующие преимущества:

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

Чтобы перейти к потоку идентификаторов токенов, внесите следующие изменения:

Клиентская сторона Android

  • Удалите GET_ACCOUNTS (Контакты), если вы его запрашиваете
  • Переключите любой код с помощью GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() или AccountManager.newChooseAccountIntent() на Auth.GOOGLE_SIGN_IN_API с GoogleSignInOptions.Builder.requestIdToken(...) .

Сторона сервера

Новый API входа выдает токены идентификатора, соответствующие спецификации OpenID Connect, в отличие от GoogleAuthUtil.getToken , который использует устаревший формат. В частности, теперь эмитент https://accounts.google.com со схемой https .

Во время процесса миграции вашему серверу необходимо проверить токен идентификатора как старого, так и нового клиентов Android. Чтобы проверить оба формата токена, внесите изменения, соответствующие используемой клиентской библиотеке (если вы ее используете):

  • Java (клиентские библиотеки Google API): обновите до 1.21.0 или новее
  • PHP (клиентские библиотеки Google API): если вы используете v1, обновитесь до 1.1.6 или новее; если вы используете v2, обновитесь до 2.0.0-RC1 или новее
  • Node.js: обновитесь до 0.9.7 или новее
  • Python или ваши собственные реализации: примите обоих этих эмитентов: https://accounts.google.com и accounts.google.com

Миграция из потока кода аутентификации сервера GoogleAuthUtil

Если вы используете GoogleAuthUtil для получения кода аутентификации сервера, вам следует перейти на новый поток кода аутентификации API входа.

Например, если ваш код Android выглядит как в следующем примере, вам следует выполнить миграцию:

Код Android

В примере, запросы код сервера аутентификации использовать oauth2:server:client_id + идентификатор клиента для веб - сервера в качестве scope параметра для GoogleAuthUtil.getToken вызова ( oauth2:server:client_id:9414861317621.apps.googleusercontent.com ).

Новый поток кода аутентификации API входа в систему имеет следующие преимущества:

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

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

Клиентская сторона Android

  • Удалите GET_ACCOUNTS (Контакты), если вы его запрашиваете
  • Переключите любой код с помощью GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() или AccountManager.newChooseAccountIntent() на Auth.GOOGLE_SIGN_IN_API с GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Сторона сервера

Сохраните текущий код, но укажите https://oauth2.googleapis.com/token в качестве конечной точки сервера токенов при GoogleAuthorizationCodeTokenRequest объекта GoogleAuthorizationCodeTokenRequest , чтобы вы могли получить токен идентификатора с адресом электронной почты пользователя, идентификатором пользователя и информацией профиля без необходимость в другом сетевом вызове. Эта конечная точка полностью обратно совместима, и приведенный ниже код будет работать с кодами аутентификации сервера, полученными как из ваших старых, так и из новых реализаций клиента Android.

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                transport,
                jsonFactory,
                // Use below for tokenServerEncodedUrl parameter
                "https://oauth2.googleapis.com/token",
                clientSecrets.getDetails().getClientId(),
                clientSecrets.getDetails().getClientSecret(),
                authCode,
                REDIRECT_URI)
               .execute();

...

// You can also get an ID token from auth code exchange.
GoogleIdToken googleIdToken = tokenResponse.parseIdToken();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(SERVER_CLIENT_ID))
        .setIssuer("https://accounts.google.com")
        .build();
// Refer to ID token documentation to see how to get data from idToken object.
GoogleIdToken idToken = verifier.verify(idTokenString);
...