আইডি টোকেন ব্যবহার করে সাইন ইন করুন

আপনি সফলভাবে একজন ব্যবহারকারীর শংসাপত্র পুনরুদ্ধার করার পরে বা সাইন-ইন ইঙ্গিতগুলি পুনরুদ্ধার করার পরে, আপনি শংসাপত্রের জন্য একটি আইডি টোকেন উপলব্ধ কিনা তা পরীক্ষা করতে পারেন৷ একটি আইডি টোকেন হল একজন ব্যবহারকারীর পরিচয়ের একটি স্বাক্ষরিত দাবী যাতে একজন ব্যবহারকারীর মৌলিক প্রোফাইল তথ্যও থাকে, সম্ভবত Google দ্বারা যাচাই করা ইমেল ঠিকানা সহ। যখন আইডি টোকেনগুলি উপলব্ধ থাকে, আপনি সেগুলিকে আপনার অ্যাপের ব্যাকএন্ডের সাথে নিরাপদে প্রমাণীকরণ করতে বা একটি নতুন অ্যাকাউন্ট তৈরি করার সময় ইমেল যাচাইকরণের ধাপটি এড়িয়ে যেতে ব্যবহার করতে পারেন৷

একটি আইডি টোকেন পাওয়া যায় যখন একটি Credential অবজেক্টের ইউজার আইডি ডিভাইসে সাইন ইন করা Google অ্যাকাউন্টের ইউজার আইডির সাথে মেলে।

একটি আইডি টোকেন দিয়ে সাইন ইন করতে, প্রথমে getIdTokens পদ্ধতিতে আইডি টোকেনটি পুনরুদ্ধার করুন। তারপর, আপনার অ্যাপের ব্যাকএন্ডে আইডি টোকেনটি পাঠান। ব্যাকএন্ডে, একটি Google API ক্লায়েন্ট লাইব্রেরি বা একটি সাধারণ-উদ্দেশ্য JWT লাইব্রেরি ব্যবহার করে টোকেনটি যাচাই করুন।

তুমি শুরু করার আগে

শংসাপত্র বস্তু থেকে একটি আইডি টোকেন পান

আপনি একজন ব্যবহারকারীর শংসাপত্র পুনরুদ্ধার করার পরে, 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 দাবির নিম্নলিখিত বিন্যাস রয়েছে:

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 সাইন-ইন ডকুমেন্টেশন দেখুন।