ユーザーの認証情報を取得した後 または取得したログインのヒント、 認証情報で ID トークンが使用可能かどうかを確認できます。ID トークンとは、 ユーザーの ID に関する署名付きのアサーション。ユーザーの基本的なプロファイルも含まれています。 情報(認証されたメールアドレスが含まれる場合もあります) GoogleID トークンが利用可能な場合、それらを使用して安全に アプリのバックエンドで認証するか、メール確認の手順をスキップするかを選択します。 。
ID トークンは、Credential
オブジェクトのユーザー ID がユーザーと一致する場合に利用可能になります。
デバイスにログインしている Google アカウントの ID。
ID トークンでログインするには、まず getIdTokens
を使用して ID トークンを取得します。
メソッドを呼び出します。次に、ID トークンをアプリのバックエンドに送信します。バックエンドで
Google API クライアント ライブラリまたは汎用 JWT を使用してトークンを取得する
ライブラリです。
始める前に
- アプリがユーザーの認証情報を取得できる必要があります。 ログインのヒントを取得します。
- コンテナ イメージをビルドするときに、
setAccountTypes(IdentityProviders.GOOGLE)
を呼び出す必要があります。CredentialRequest
オブジェクトとHintRequest
オブジェクト。
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 for Passwords の ID トークンの aud
クレームは次のとおりです。
形式:
android://SHA512_HASH@ANDROID_PACKAGE_NAME
値 SHA512HASH は、署名の SHA-512 ハッシュです。
あります。この値は、keytool
ユーティリティと openssl
ユーティリティを使用して取得できます。
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 ログインに関するドキュメントをご覧ください をご覧ください。