우리는 웹에 대한 구글 로그인 자바 스크립트 플랫폼 라이브러리를 중단 . 인증 및 사용자 로그인의 경우, 모두 새로운 Google 아이덴티티 서비스 SDK를 사용하여 대신 안드로이드 .

GoogleAuthUtil 및 Plus.API에서 마이그레이션

이전에 GoogleAuthUtil.getToken 또는 Plus.API 사용하여 Google Sign-In과 통합 한 경우 보안을 강화하고 사용자 환경을 개선하려면 최신 로그인 API로 마이그레이션해야합니다.

액세스 토큰 안티 패턴에서 마이그레이션

GoogleAuthUtil.getToken 을 사용하여 얻은 액세스 토큰을 ID 어설 션으로 백엔드 서버에 GoogleAuthUtil.getToken . 토큰이 백엔드에 발행되었는지 쉽게 확인할 수 없어 공격자가 액세스 토큰을 삽입 할 가능성이 있기 때문입니다.

예를 들어 Android 코드가 아래 예와 같은 경우 앱을 현재 모범 사례로 마이그레이션해야합니다.

Android 코드

이 예에서 액세스 토큰 요청은 oauth2: 와 범위 문자열을 GoogleAuthUtil.getToken 호출 ( oauth2:https://www.googleapis.com/auth/plus.login )의 scope 매개 변수로 사용합니다.

GoogleAuthUtil.getToken 획득 한 액세스 토큰으로 인증하는 대신 ID 토큰 흐름 또는 인증 코드 흐름을 사용하세요.

ID 토큰 흐름으로 마이그레이션

사용자 ID, 이메일 주소, 이름 또는 프로필 사진 URL 만 있으면 ID 토큰 흐름을 사용하세요.

ID 토큰 플로우로 마이그레이션하려면 다음과 같이 변경하십시오.

Android 클라이언트 측

  • 요청하는 경우 GET_ACCOUNTS (연락처) 권한을 제거하십시오.
  • GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() 또는 AccountManager.newChooseAccountIntent()Auth.GOOGLE_SIGN_IN_API 하여 GoogleSignInOptions.Builder.requestIdToken(...) 구성을 사용하여 GoogleAuthUtil 코드를 전환합니다.

서버 측

  • ID 토큰 인증을 위한 새 엔드 포인트 생성
  • 클라이언트 앱이 마이그레이션 된 후 이전 엔드 포인트 끄기

서버 인증 코드 흐름으로 마이그레이션

서버에서 Google 드라이브, Youtube 또는 주소록과 같은 다른 Google API에 액세스해야하는 경우 서버 인증 코드 흐름을 사용하세요.

서버 인증 코드 플로우로 마이그레이션하려면 다음과 같이 변경하십시오.

Android 클라이언트 측

  • 요청하는 경우 GET_ACCOUNTS (연락처) 권한을 제거하십시오.
  • 사용하는 코드 스위치 GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() , 또는 AccountManager.newChooseAccountIntent()Auth.GOOGLE_SIGN_IN_APIGoogleSignInOptions.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 ID 토큰 흐름에서 마이그레이션

GoogleAuthUtil 을 사용하여 ID 토큰을 가져 오는 경우 새 로그인 API ID 토큰 흐름으로 마이그레이션해야합니다.

예를 들어 Android 코드가 다음 예와 같은 경우 마이그레이션해야합니다.

Android 코드

이 예에서 ID 토큰 요청은 GoogleAuthUtil.getToken 호출의 'scope'매개 변수로 GoogleAuthUtil.getToken audience:server:client_id 와 웹 서버의 클라이언트 ID를 사용합니다 ( GoogleAuthUtil.getToken audience:server:client_id:9414861317621.apps.googleusercontent.com ).

새로운 로그인 API ID 토큰 흐름에는 다음과 같은 이점이 있습니다.

  • 간소화 된 원탭 로그인 경험
  • 추가 네트워크 호출없이 서버에서 사용자 프로필 정보를 얻을 수 있습니다.

ID 토큰 플로우로 마이그레이션하려면 다음과 같이 변경하십시오.

Android 클라이언트 측

  • 요청하는 경우 GET_ACCOUNTS (연락처) 권한을 제거하십시오.
  • GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() 또는 AccountManager.newChooseAccountIntent()Auth.GOOGLE_SIGN_IN_API 하여 GoogleSignInOptions.Builder.requestIdToken(...) 구성을 사용하여 GoogleAuthUtil 코드를 전환합니다.

서버 측

새 로그인 API는 지원 중단 된 형식을 사용하는 GoogleAuthUtil.getToken 과 달리 OpenID Connect 사양을 준수하는 ID 토큰을 발급합니다. 특히 발급자는 이제 https 스키마가있는 https://accounts.google.com 입니다.

마이그레이션 프로세스 중에 서버는 이전 및 새 Android 클라이언트 모두에서 ID 토큰을 확인해야합니다. 토큰의 두 형식을 모두 확인하려면 사용하는 클라이언트 라이브러리에 해당하는 변경을 수행하십시오 (사용하는 경우).

  • 자바 (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.comaccounts.google.com 두 발급자 모두 수락

GoogleAuthUtil 서버 인증 코드 흐름에서 마이그레이션

GoogleAuthUtil 을 사용하여 서버 인증 코드를 얻는 경우 새로운 Sign-In API 인증 코드 흐름으로 마이그레이션해야합니다.

예를 들어 Android 코드가 다음 예와 같은 경우 마이그레이션해야합니다.

Android 코드

예제에서 서버 인증 코드 요청은 oauth2:server:client_id + 웹 서버의 클라이언트 ID를 GoogleAuthUtil.getToken 호출의 scope 매개 변수로 사용합니다 ( oauth2:server:client_id:9414861317621.apps.googleusercontent.com ).

새로운 로그인 API 인증 코드 흐름에는 다음과 같은 이점이 있습니다.

  • 간소화 된 원탭 로그인 경험
  • 아래 마이그레이션 가이드를 따르면 인증 코드 교환을 수행 할 때 서버에서 사용자의 프로필 정보가 포함 된 ID 토큰을 얻을 수 있습니다.

새 인증 코드 흐름으로 이전하려면 다음과 같이 변경하세요.

Android 클라이언트 측

  • 요청하는 경우 GET_ACCOUNTS (연락처) 권한을 제거하십시오.
  • 사용하는 코드 스위치 GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() , 또는 AccountManager.newChooseAccountIntent()Auth.GOOGLE_SIGN_IN_APIGoogleSignInOptions.Builder.requestServerAuthCode(...) 구성.

서버 측

현재 코드를 유지하되 GoogleAuthorizationCodeTokenRequest 객체를 구성 할 때 https://oauth2.googleapis.com/token 을 토큰 서버 엔드 포인트로 지정하여 사용자의 이메일, 사용자 ID 및 프로필 정보가 포함 된 ID 토큰을 얻을 수 있습니다. 다른 네트워크 호출이 필요합니다. 이 엔드 포인트는 이전 버전과 완전히 호환되며 아래 코드는 이전 및 새 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);
...