이전에 다음을 사용하여 Google 로그인과 통합한 경우
GoogleAuthUtil.getToken
또는 Plus.API
를 사용하는 경우 최신 버전으로 이전해야 합니다.
보안 강화와 사용자 환경을 위한 Sign-In API
액세스 토큰 안티패턴에서 이전
GoogleAuthUtil.getToken
으로 획득한 액세스 토큰을 다음 주소로 전송해서는 안 됩니다.
백엔드 서버를 ID 어설션으로 사용하는 것이 좋습니다.
토큰이 백엔드로 발급되어 삽입에 취약하다는 것을 알 수 있습니다.
암호화할 수 있습니다
예를 들어 Android 코드가 아래 예와 같다면 최신 권장사항으로 앱을 이전하세요.
이 예시에서 액세스 토큰 요청은 oauth2:
과 범위 문자열을
GoogleAuthUtil.getToken
호출을 위한 scope
매개변수
(oauth2:https://www.googleapis.com/auth/plus.login
)
인증 기관을 통해 획득한 액세스 토큰으로 인증하는 대신
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(...)
구성
서버 측
- ID 토큰 인증을 위한 새 엔드포인트 만들기
- 클라이언트 앱이 마이그레이션된 후 이전 엔드포인트 사용 중지
서버 인증 코드 흐름으로 이전
서버가 Google Drive, 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 ID 토큰 흐름에서 이전
GoogleAuthUtil
를 사용하여 ID 토큰을 가져오는 경우 새 토큰으로 이전해야 합니다.
Sign-In API ID 토큰 흐름
예를 들어 Android 코드가 다음 예와 같다면 migrate:
이 예시에서 ID 토큰 요청은 audience:server:client_id
과
‘scope’ 매개변수로 웹 서버의 클라이언트 ID를
통화 GoogleAuthUtil.getToken
건
(audience:server:client_id:9414861317621.apps.googleusercontent.com
)
새로운 Sign-In API ID 토큰 흐름에는 다음과 같은 이점이 있습니다.
- 간편한 원탭 로그인 환경
- 추가 네트워크 호출 없이도 서버에서 사용자 프로필 정보를 가져올 수 있습니다.
ID 토큰 흐름으로 이전하려면 다음과 같이 변경합니다.
Android 클라이언트 측
GET_ACCOUNTS
(연락처) 권한 요청 시 삭제GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
또는AccountManager.newChooseAccountIntent()
에서Auth.GOOGLE_SIGN_IN_API
(으)로GoogleSignInOptions.Builder.requestIdToken(...)
구성
서버 측
새로운 Sign-In API는 OpenID Connect를 준수하는 ID 토큰을 발급합니다.
지원 중단된 형식을 사용하는 GoogleAuthUtil.getToken
와 달리
특히 이제 발급기관은 https://accounts.google.com
이며 https
입니다.
사용할 수 있습니다
이전 프로세스 중에 서버가 두 가지 URL 모두에서 이전 및 새 Android 클라이언트를 지원합니다. 토큰의 두 형식을 모두 확인하려면 사용하는 클라이언트 라이브러리에 해당하는 변경사항 (사용하는 경우):
- 자바 (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
를 사용하여 서버 인증 코드를 가져오는 경우
새로운 Sign-In API 인증 코드 흐름이 추가되었습니다.
예를 들어 Android 코드가 다음 예와 같다면 migrate:
이 예에서 서버 인증 코드 요청은 oauth2:server:client_id
+
다음과 같이 웹 서버의 클라이언트 ID를 scope
매개변수로 전달합니다.
통화 GoogleAuthUtil.getToken
건 (oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
새로운 Sign-In API 인증 코드 흐름에는 다음과 같은 이점이 있습니다.
- 간편한 원탭 로그인 환경
- 아래의 이전 가이드를 따르면 서버에서 ID 토큰을 가져올 수 있습니다. 인증 코드 교환을 수행할 때 사용자의 프로필 정보 포함
새 인증 코드 흐름으로 이전하려면 다음과 같이 변경합니다.
Android 클라이언트 측
GET_ACCOUNTS
(연락처) 권한 요청 시 삭제GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
또는AccountManager.newChooseAccountIntent()
에서Auth.GOOGLE_SIGN_IN_API
(으)로GoogleSignInOptions.Builder.requestServerAuthCode(...)
구성
서버 측
현재 코드를 유지하되 https://oauth2.googleapis.com/token
를 지정
를 토큰 서버 엔드포인트로
GoogleAuthorizationCodeTokenRequest
객체 덕분에 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); ...