ID 토큰을 사용하여 로그인

<ph type="x-smartling-placeholder">

사용자 인증 정보를 검색한 후 또는 로그인 힌트 검색 사용자 인증 정보에 ID 토큰을 사용할 수 있는지 확인할 수 있습니다. ID 토큰은 사용자 ID의 서명된 어설션(사용자의 기본 프로필도 포함) 이러한 정보에는 Google의 인증을 받은 이메일 주소가 포함되며 Google 사용할 수 있는 ID 토큰이 있으면 이를 사용하여 안전하게 앱의 백엔드에 인증하거나 이메일 인증 단계 건너뛰기 새 계정을 만들 때

ID 토큰은 Credential 객체의 사용자 ID가 사용자와 일치하면 사용할 수 있습니다. 기기에 로그인된 Google 계정의 ID입니다.

ID 토큰으로 로그인하려면 먼저 getIdTokens 메서드를 사용하여 축소하도록 요청합니다. 그런 다음 ID 토큰을 앱의 백엔드로 전송합니다. 백엔드에서 다음을 확인합니다. Google API 클라이언트 라이브러리 또는 범용 JWT를 사용한 토큰 있습니다.

시작하기 전에

Credentials 객체에서 ID 토큰 가져오기

사용자 인증 정보를 가져온 후 Credentials 객체가 ID 토큰을 포함할 수 없습니다. 지원되는 경우 getIdTokens를 호출하여 가져온 후 전송합니다. 백엔드에 연결합니다

if (!credential.getIdTokens().isEmpty()) {
    String idToken = credential.getIdTokens().get(0).getIdToken();

    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("https://yourbackend.example.com/tokensignin");

    try {
        List nameValuePairs = new ArrayList(1);
        nameValuePairs.add(new BasicNameValuePair("idToken", idToken));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpClient.execute(httpPost);
        int statusCode = response.getStatusLine().getStatusCode();
        final String responseBody = EntityUtils.toString(response.getEntity());
        Log.i(TAG, "Signed in as: " + responseBody);
    }
}

백엔드에서 ID 토큰 확인

HTTPS POST로 ID 토큰을 받은 후에는 토큰의 서명하고 토큰의 aud, iss, exp 클레임을 확인합니다.

비밀번호 대용 Smart Lock의 ID 토큰의 aud 클레임에는 다음이 포함됩니다. 형식:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

SHA512HASH 는 서명의 SHA-512 해시입니다. 있습니다. keytoolopenssl 유틸리티를 사용하여 이 값을 가져올 수 있습니다.

keytool -exportcert -keystore path-to-keystore -alias key-name 
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-
'

또는 유효한 것으로 확인된 ID 토큰을 검사하여 SHA-512 해시를 가져올 수 있습니다.

JWT 라이브러리는 이러한 인증 작업 중 일부를 자동으로 처리할 수 있습니다. 예를 들어 Java용 Google API 클라이언트 라이브러리 사용:

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

...

// Verifier that checks that the token has the proper issuer and audience,
// and hasn't expired
private static GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(String.format("android://%s@%s", SHA512_HASH, PACKAGE_NAME)))
        .build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
  Payload payload = idToken.getPayload();
  System.out.println("User email: " + payload.getEmail());
  if (payload.getEmailVerified()) {
    System.out.println("Email verified by Google.");
  }
} else {
  System.out.println("Invalid ID token.");
}

Google 로그인 문서를 참고하세요. 를 참조하세요.