پس از بازیابی موفقیت آمیز اعتبارنامه کاربر یا بازیابی نکات ورود به سیستم ، می توانید بررسی کنید که آیا یک رمز شناسه برای اعتبارنامه موجود است یا خیر. یک نشانه شناسه تأیید امضا شده هویت کاربر است که حاوی اطلاعات اولیه نمایه کاربر، احتمالاً شامل آدرس ایمیلی است که توسط Google تأیید شده است. هنگامی که نشانههای شناسه در دسترس هستند، میتوانید از آنها برای احراز هویت ایمن با باطن برنامهتان استفاده کنید، یا هنگام ایجاد حساب جدید، مرحله تأیید ایمیل را رد کنید.
زمانی که شناسه کاربری شیء Credential
با شناسه کاربری یک حساب Google که در دستگاه وارد شده است مطابقت داشته باشد، یک رمز شناسه در دسترس است.
برای ورود به سیستم با یک نشانه شناسه، ابتدا رمز ID را با روش getIdTokens
بازیابی کنید. سپس، کد شناسه را به باطن برنامه خود ارسال کنید. در باطن، توکن را با استفاده از یک کتابخانه سرویس گیرنده Google API یا یک کتابخانه JWT همه منظوره تأیید کنید.
قبل از شروع
- برنامه شما باید بتواند با موفقیت اطلاعات کاربری کاربر را بازیابی کند یا یک راهنمایی ورود به سیستم را بازیابی کند .
- هنگام ساخت اشیاء
CredentialRequest
وHintRequest
بایدsetAccountTypes(IdentityProviders.GOOGLE)
فراخوانی کنید.
یک رمز شناسه از شی Credentials دریافت کنید
پس از بازیابی اعتبار یک کاربر، بررسی کنید که آیا شیء Credentials
دارای یک رمز شناسه است یا خیر. اگر چنین شد، با getIdTokens
تماس بگیرید تا آن را بازیابی کنید و آن را با HTTPS POST به باطن خود ارسال کنید.
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);
}
}
شناسه رمز موجود در باطن را تأیید کنید
پس از دریافت رمز شناسه توسط HTTPS POST، باید امضای توکن را تأیید کنید و ادعاهای aud
، iss
و exp
آن را تأیید کنید.
ادعای aud
یک رمز شناسه از Smart Lock for Passwords دارای قالب زیر است:
android://SHA512_HASH@ANDROID_PACKAGE_NAME
مقدار SHA512 HASH هش SHA-512 گواهی امضای شما است. می توانید این مقدار را با استفاده از ابزار keytool
و openssl
بدست آورید:
keytool -exportcert -keystore path-to-keystore -alias key-name
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-'
یا، میتوانید با بررسی شناسهای که میدانید معتبر است، هش SHA-512 را دریافت کنید.
کتابخانههای JWT میتوانند برخی از این وظایف تأیید را برای شما انجام دهند. به عنوان مثال، استفاده از کتابخانه سرویس گیرنده 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 مراجعه کنید.