আইডি টোকেন ব্যবহার করে একটি ব্যাকএন্ড দিয়ে প্রমাণীকরণ করুন

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

যখন আইডি টোকেনগুলি উপলব্ধ থাকে, আপনি সেগুলিকে আপনার অ্যাপের ব্যাকএন্ডের সাথে নিরাপদে প্রমাণীকরণ করতে বা ব্যবহারকারীর ইমেল ঠিকানা যাচাই করার প্রয়োজন ছাড়াই স্বয়ংক্রিয়ভাবে একটি নতুন অ্যাকাউন্টের জন্য ব্যবহারকারীকে সাইন আপ করতে ব্যবহার করতে পারেন৷

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

আপনি যদি ঐচ্ছিকভাবে রিপ্লে আক্রমণ এড়াতে সাহায্য করার জন্য একটি নন্স ব্যবহার করা বেছে নিয়ে থাকেন, তাহলে আপনার ব্যাকএন্ড সার্ভারে ID টোকেন সহ এটি পাঠাতে getNonce ব্যবহার করুন এবং প্রত্যাশিত মান পরীক্ষা করুন। আমরা সুপারিশ করছি যে আপনি ব্যবহারকারীর নিরাপত্তা এবং নিরাপত্তা উন্নত করতে একটি নন্স ব্যবহার করার বিষয়ে দৃঢ়ভাবে বিবেচনা করুন।

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

আপনি একজন ব্যবহারকারীর শংসাপত্র পুনরুদ্ধার করার পরে, শংসাপত্র বস্তুতে একটি আইডি টোকেন অন্তর্ভুক্ত আছে কিনা তা পরীক্ষা করুন৷ যদি এটি হয়, এটি আপনার ব্যাকএন্ডে পাঠান।

জাভা

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data);
                  String idToken = credential.getGoogleIdToken();
                  if (idToken !=  null) {
                      // Got an ID token from Google. Use it to authenticate
                      // with your backend.
                      Log.d(TAG, "Got ID token.");
                  }
              } catch (ApiException e) {
                  // ...
              }
              break;
      }
  }
}

কোটলিন

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
             REQ_ONE_TAP -> {
                try {
                    val credential = oneTapClient.getSignInCredentialFromIntent(data)
                    val idToken = credential.googleIdToken
                    when {
                        idToken != null -> {
                            // Got an ID token from Google. Use it to authenticate
                            // with your backend.
                            Log.d(TAG, "Got ID token.")
                        }
                        else -> {
                            // Shouldn't happen.
                            Log.d(TAG, "No ID token!")
                        }
                    }
                } catch (e: ApiException) {
                    // ...
            }
        }
    }
    // ...
}

আইডি টোকেনের অখণ্ডতা যাচাই করুন

আপনি HTTPS POST দ্বারা আইডি টোকেন পাওয়ার পরে, আপনাকে অবশ্যই টোকেনের অখণ্ডতা যাচাই করতে হবে।

টোকেনটি বৈধ কিনা তা যাচাই করতে, নিম্নলিখিত মানদণ্ডগুলি সন্তুষ্ট তা নিশ্চিত করুন:

  • আইডি টোকেনটি Google দ্বারা সঠিকভাবে স্বাক্ষরিত। টোকেনের স্বাক্ষর যাচাই করতে Google-এর সর্বজনীন কী ( JWK বা PEM ফর্ম্যাটে উপলব্ধ) ব্যবহার করুন। এই কীগুলি নিয়মিত ঘোরানো হয়; আপনার কখন সেগুলি আবার পুনরুদ্ধার করা উচিত তা নির্ধারণ করতে প্রতিক্রিয়াতে Cache-Control শিরোনামটি পরীক্ষা করুন।
  • আইডি টোকেনে aud মান আপনার অ্যাপের ক্লায়েন্ট আইডিগুলির একটির সমান। আপনার অ্যাপ্লিকেশানের ব্যাকএন্ড সার্ভারে একই ব্যবহারকারীর ডেটা অ্যাক্সেস করতে ব্যবহৃত কোনও দূষিত অ্যাপে জারি করা আইডি টোকেনগুলি প্রতিরোধ করতে এই চেকটি প্রয়োজনীয়৷
  • ID টোকেনে iss এর মান accounts.google.com বা https://accounts.google.com এর সমান।
  • আইডি টোকেনের মেয়াদ exp হয় নি।
  • আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google হোস্ট করা ডোমেনের অন্তর্গত নয়।

এই যাচাইকরণ পদক্ষেপগুলি সম্পাদন করার জন্য আপনার নিজের কোড লেখার পরিবর্তে, আমরা দৃঢ়ভাবে আপনার প্ল্যাটফর্মের জন্য একটি Google API ক্লায়েন্ট লাইব্রেরি বা একটি সাধারণ-উদ্দেশ্য JWT লাইব্রেরি ব্যবহার করার পরামর্শ দিই। ডেভেলপমেন্ট এবং ডিবাগিংয়ের জন্য, আপনি আমাদের tokeninfo যাচাইকরণ শেষ পয়েন্টে কল করতে পারেন।

,

টোকেনটি বৈধ কিনা তা যাচাই করতে, নিম্নলিখিত মানদণ্ডগুলি সন্তুষ্ট তা নিশ্চিত করুন:

  • আইডি টোকেনটি Google দ্বারা সঠিকভাবে স্বাক্ষরিত। টোকেনের স্বাক্ষর যাচাই করতে Google-এর সর্বজনীন কী ( JWK বা PEM ফর্ম্যাটে উপলব্ধ) ব্যবহার করুন। এই কীগুলি নিয়মিত ঘোরানো হয়; আপনার কখন সেগুলি আবার পুনরুদ্ধার করা উচিত তা নির্ধারণ করতে প্রতিক্রিয়াতে Cache-Control শিরোনামটি পরীক্ষা করুন।
  • আইডি টোকেনে aud মান আপনার অ্যাপের ক্লায়েন্ট আইডিগুলির একটির সমান। আপনার অ্যাপ্লিকেশানের ব্যাকএন্ড সার্ভারে একই ব্যবহারকারীর ডেটা অ্যাক্সেস করতে ব্যবহৃত কোনও দূষিত অ্যাপে জারি করা আইডি টোকেনগুলি প্রতিরোধ করতে এই চেকটি প্রয়োজনীয়৷
  • ID টোকেনে iss এর মান accounts.google.com বা https://accounts.google.com এর সমান।
  • আইডি টোকেনের মেয়াদ exp হয় নি।
  • আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google হোস্ট করা ডোমেনের অন্তর্গত নয়।

এই যাচাইকরণ পদক্ষেপগুলি সম্পাদন করার জন্য আপনার নিজের কোড লেখার পরিবর্তে, আমরা দৃঢ়ভাবে আপনার প্ল্যাটফর্মের জন্য একটি Google API ক্লায়েন্ট লাইব্রেরি বা একটি সাধারণ-উদ্দেশ্য JWT লাইব্রেরি ব্যবহার করার পরামর্শ দিই। ডেভেলপমেন্ট এবং ডিবাগিংয়ের জন্য, আপনি আমাদের tokeninfo যাচাইকরণ শেষ পয়েন্টে কল করতে পারেন।

একটি Google API ক্লায়েন্ট লাইব্রেরি ব্যবহার করা

Google API ক্লায়েন্ট লাইব্রেরিগুলির একটি ব্যবহার করা (যেমন Java , Node.js , PHP , Python ) হল একটি প্রোডাকশন পরিবেশে Google আইডি টোকেন যাচাই করার প্রস্তাবিত উপায়৷

জাভা

জাভাতে একটি আইডি টোকেন যাচাই করতে, GoogleIdTokenVerifier অবজেক্ট ব্যবহার করুন। উদাহরণ স্বরূপ:

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;

...

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
    // Specify the CLIENT_ID of the app that accesses the backend:
    .setAudience(Collections.singletonList(CLIENT_ID))
    // Or, if multiple clients access the backend:
    //.setAudience(Arrays.asList(CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3))
    .build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
  Payload payload = idToken.getPayload();

  // Print user identifier
  String userId = payload.getSubject();
  System.out.println("User ID: " + userId);

  // Get profile information from payload
  String email = payload.getEmail();
  boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
  String name = (String) payload.get("name");
  String pictureUrl = (String) payload.get("picture");
  String locale = (String) payload.get("locale");
  String familyName = (String) payload.get("family_name");
  String givenName = (String) payload.get("given_name");

  // Use or store profile information
  // ...

} else {
  System.out.println("Invalid ID token.");
}

GoogleIdTokenVerifier.verify() পদ্ধতি JWT স্বাক্ষর, aud দাবি, iss দাবি এবং exp দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি Payload.getHostedDomain() পদ্ধতিতে ফেরত দেওয়া ডোমেন নাম চেক করে hd দাবিটি যাচাই করতে পারেন। অ্যাকাউন্টটি একটি ডোমেন বা সংস্থা দ্বারা পরিচালিত হয় তা নিশ্চিত করার জন্য email দাবির ডোমেন অপর্যাপ্ত৷

Node.js

Node.js-এ একটি আইডি টোকেন যাচাই করতে, Node.js-এর জন্য Google Auth Library ব্যবহার করুন। লাইব্রেরি ইনস্টল করুন:

npm install google-auth-library --save
তারপর, verifyIdToken() ফাংশনটি কল করুন। উদাহরণ স্বরূপ:

const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client();
async function verify() {
  const ticket = await client.verifyIdToken({
      idToken: token,
      audience: CLIENT_ID,  // Specify the CLIENT_ID of the app that accesses the backend
      // Or, if multiple clients access the backend:
      //[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
  });
  const payload = ticket.getPayload();
  const userid = payload['sub'];
  // If request specified a G Suite domain:
  // const domain = payload['hd'];
}
verify().catch(console.error);

verifyIdToken ফাংশন JWT স্বাক্ষর, aud দাবি, exp claim এবং iss দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google হোস্ট করা ডোমেনের অন্তর্গত নয়।

পিএইচপি

পিএইচপি-তে একটি আইডি টোকেন যাচাই করতে, পিএইচপি-এর জন্য Google API ক্লায়েন্ট লাইব্রেরি ব্যবহার করুন। লাইব্রেরি ইনস্টল করুন (উদাহরণস্বরূপ, কম্পোজার ব্যবহার করে):

composer require google/apiclient
তারপর, verifyIdToken() ফাংশনটি কল করুন। উদাহরণ স্বরূপ:

require_once 'vendor/autoload.php';

// Get $id_token via HTTPS POST.

$client = new Google_Client(['client_id' => $CLIENT_ID]);  // Specify the CLIENT_ID of the app that accesses the backend
$payload = $client->verifyIdToken($id_token);
if ($payload) {
  $userid = $payload['sub'];
  // If request specified a G Suite domain:
  //$domain = $payload['hd'];
} else {
  // Invalid ID token
}

verifyIdToken ফাংশন JWT স্বাক্ষর, aud দাবি, exp claim এবং iss দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google হোস্ট করা ডোমেনের অন্তর্গত নয়।

পাইথন

পাইথনে একটি আইডি টোকেন যাচাই করতে, verify_oauth2_token ফাংশনটি ব্যবহার করুন। উদাহরণ স্বরূপ:

from google.oauth2 import id_token
from google.auth.transport import requests

# (Receive token by HTTPS POST)
# ...

try:
    # Specify the CLIENT_ID of the app that accesses the backend:
    idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)

    # Or, if multiple clients access the backend server:
    # idinfo = id_token.verify_oauth2_token(token, requests.Request())
    # if idinfo['aud'] not in [CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]:
    #     raise ValueError('Could not verify audience.')

    # If auth request is from a G Suite domain:
    # if idinfo['hd'] != GSUITE_DOMAIN_NAME:
    #     raise ValueError('Wrong hosted domain.')

    # ID token is valid. Get the user's Google Account ID from the decoded token.
    userid = idinfo['sub']
except ValueError:
    # Invalid token
    pass

verify_oauth2_token ফাংশন JWT স্বাক্ষর, aud দাবি এবং exp দাবি যাচাই করে। যে বস্তুটি verify_oauth2_token ফেরত দেয় তা পরীক্ষা করে আপনাকে অবশ্যই hd দাবি (যদি প্রযোজ্য হয়) যাচাই করতে হবে। যদি একাধিক ক্লায়েন্ট ব্যাকএন্ড সার্ভার অ্যাক্সেস করে, তাহলে নিজেও aud দাবি যাচাই করুন।

,

একটি Google API ক্লায়েন্ট লাইব্রেরি ব্যবহার করা

Google API ক্লায়েন্ট লাইব্রেরিগুলির একটি ব্যবহার করা (যেমন Java , Node.js , PHP , Python ) হল একটি প্রোডাকশন পরিবেশে Google আইডি টোকেন যাচাই করার প্রস্তাবিত উপায়৷

জাভা

জাভাতে একটি আইডি টোকেন যাচাই করতে, GoogleIdTokenVerifier অবজেক্ট ব্যবহার করুন। উদাহরণ স্বরূপ:

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;

...

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
    // Specify the CLIENT_ID of the app that accesses the backend:
    .setAudience(Collections.singletonList(CLIENT_ID))
    // Or, if multiple clients access the backend:
    //.setAudience(Arrays.asList(CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3))
    .build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
  Payload payload = idToken.getPayload();

  // Print user identifier
  String userId = payload.getSubject();
  System.out.println("User ID: " + userId);

  // Get profile information from payload
  String email = payload.getEmail();
  boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
  String name = (String) payload.get("name");
  String pictureUrl = (String) payload.get("picture");
  String locale = (String) payload.get("locale");
  String familyName = (String) payload.get("family_name");
  String givenName = (String) payload.get("given_name");

  // Use or store profile information
  // ...

} else {
  System.out.println("Invalid ID token.");
}

GoogleIdTokenVerifier.verify() পদ্ধতি JWT স্বাক্ষর, aud দাবি, iss দাবি এবং exp দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি Payload.getHostedDomain() পদ্ধতিতে ফেরত দেওয়া ডোমেন নাম চেক করে hd দাবিটি যাচাই করতে পারেন। অ্যাকাউন্টটি একটি ডোমেন বা সংস্থা দ্বারা পরিচালিত হয় তা নিশ্চিত করার জন্য email দাবির ডোমেন অপর্যাপ্ত৷

Node.js

Node.js-এ একটি আইডি টোকেন যাচাই করতে, Node.js-এর জন্য Google Auth Library ব্যবহার করুন। লাইব্রেরি ইনস্টল করুন:

npm install google-auth-library --save
তারপর, verifyIdToken() ফাংশনটি কল করুন। উদাহরণ স্বরূপ:

const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client();
async function verify() {
  const ticket = await client.verifyIdToken({
      idToken: token,
      audience: CLIENT_ID,  // Specify the CLIENT_ID of the app that accesses the backend
      // Or, if multiple clients access the backend:
      //[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
  });
  const payload = ticket.getPayload();
  const userid = payload['sub'];
  // If request specified a G Suite domain:
  // const domain = payload['hd'];
}
verify().catch(console.error);

verifyIdToken ফাংশন JWT স্বাক্ষর, aud দাবি, exp claim এবং iss দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google হোস্ট করা ডোমেনের অন্তর্গত নয়।

পিএইচপি

পিএইচপি-তে একটি আইডি টোকেন যাচাই করতে, পিএইচপি-এর জন্য Google API ক্লায়েন্ট লাইব্রেরি ব্যবহার করুন। লাইব্রেরি ইনস্টল করুন (উদাহরণস্বরূপ, কম্পোজার ব্যবহার করে):

composer require google/apiclient
তারপর, verifyIdToken() ফাংশনটি কল করুন। উদাহরণ স্বরূপ:

require_once 'vendor/autoload.php';

// Get $id_token via HTTPS POST.

$client = new Google_Client(['client_id' => $CLIENT_ID]);  // Specify the CLIENT_ID of the app that accesses the backend
$payload = $client->verifyIdToken($id_token);
if ($payload) {
  $userid = $payload['sub'];
  // If request specified a G Suite domain:
  //$domain = $payload['hd'];
} else {
  // Invalid ID token
}

verifyIdToken ফাংশন JWT স্বাক্ষর, aud দাবি, exp claim এবং iss দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google হোস্ট করা ডোমেনের অন্তর্গত নয়।

পাইথন

পাইথনে একটি আইডি টোকেন যাচাই করতে, verify_oauth2_token ফাংশনটি ব্যবহার করুন। উদাহরণ স্বরূপ:

from google.oauth2 import id_token
from google.auth.transport import requests

# (Receive token by HTTPS POST)
# ...

try:
    # Specify the CLIENT_ID of the app that accesses the backend:
    idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)

    # Or, if multiple clients access the backend server:
    # idinfo = id_token.verify_oauth2_token(token, requests.Request())
    # if idinfo['aud'] not in [CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]:
    #     raise ValueError('Could not verify audience.')

    # If auth request is from a G Suite domain:
    # if idinfo['hd'] != GSUITE_DOMAIN_NAME:
    #     raise ValueError('Wrong hosted domain.')

    # ID token is valid. Get the user's Google Account ID from the decoded token.
    userid = idinfo['sub']
except ValueError:
    # Invalid token
    pass

verify_oauth2_token ফাংশন JWT স্বাক্ষর, aud দাবি এবং exp দাবি যাচাই করে। যে বস্তুটি verify_oauth2_token ফেরত দেয় তা পরীক্ষা করে আপনাকে অবশ্যই hd দাবি (যদি প্রযোজ্য হয়) যাচাই করতে হবে। যদি একাধিক ক্লায়েন্ট ব্যাকএন্ড সার্ভার অ্যাক্সেস করে, তাহলে নিজেও aud দাবি যাচাই করুন।

টোকেনইনফো এন্ডপয়েন্টে কল করা হচ্ছে

ডিবাগিংয়ের জন্য একটি আইডি টোকেন স্বাক্ষর যাচাই করার একটি সহজ উপায় হল tokeninfo এন্ডপয়েন্ট ব্যবহার করা। এই এন্ডপয়েন্টে কল করার সাথে একটি অতিরিক্ত নেটওয়ার্ক অনুরোধ অন্তর্ভুক্ত থাকে যা আপনার নিজের কোডে যথাযথ বৈধতা এবং পেলোড নিষ্কাশন পরীক্ষা করার সময় আপনার জন্য বেশিরভাগ বৈধতা দেয়। এটি প্রোডাকশন কোডে ব্যবহারের জন্য উপযুক্ত নয় কারণ অনুরোধগুলি থ্রোটল হতে পারে বা অন্যথায় মাঝে মাঝে ত্রুটির বিষয় হতে পারে।

tokeninfo এন্ডপয়েন্ট ব্যবহার করে একটি আইডি টোকেন যাচাই করতে, একটি HTTPS পোস্ট করুন বা এন্ডপয়েন্টে GET অনুরোধ করুন এবং id_token প্যারামিটারে আপনার আইডি টোকেন পাস করুন। উদাহরণস্বরূপ, টোকেন "XYZ123" যাচাই করতে, নিম্নলিখিত GET অনুরোধ করুন:

https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123

যদি টোকেনটি সঠিকভাবে স্বাক্ষরিত হয় এবং iss এবং exp দাবির প্রত্যাশিত মান থাকে, তাহলে আপনি একটি HTTP 200 প্রতিক্রিয়া পাবেন, যেখানে মূল অংশে JSON- ফরম্যাটেড আইডি টোকেন দাবিগুলি রয়েছে৷ এখানে একটি উদাহরণ প্রতিক্রিয়া:

{
 // These six fields are included in all Google ID Tokens.
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953",

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
}

আপনি যদি আইডি টোকেনটি Google Workspace অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google Workspace হোস্ট করা ডোমেনের অন্তর্গত নয়।

,

টোকেনইনফো এন্ডপয়েন্টে কল করা হচ্ছে

ডিবাগিংয়ের জন্য একটি আইডি টোকেন স্বাক্ষর যাচাই করার একটি সহজ উপায় হল tokeninfo এন্ডপয়েন্ট ব্যবহার করা। এই এন্ডপয়েন্টে কল করার সাথে একটি অতিরিক্ত নেটওয়ার্ক অনুরোধ অন্তর্ভুক্ত থাকে যা আপনার নিজের কোডে যথাযথ বৈধতা এবং পেলোড নিষ্কাশন পরীক্ষা করার সময় আপনার জন্য বেশিরভাগ বৈধতা দেয়। এটি প্রোডাকশন কোডে ব্যবহারের জন্য উপযুক্ত নয় কারণ অনুরোধগুলি থ্রোটল হতে পারে বা অন্যথায় মাঝে মাঝে ত্রুটির বিষয় হতে পারে।

tokeninfo এন্ডপয়েন্ট ব্যবহার করে একটি আইডি টোকেন যাচাই করতে, একটি HTTPS পোস্ট করুন বা এন্ডপয়েন্টে GET অনুরোধ করুন এবং id_token প্যারামিটারে আপনার আইডি টোকেন পাস করুন। উদাহরণস্বরূপ, টোকেন "XYZ123" যাচাই করতে, নিম্নলিখিত GET অনুরোধ করুন:

https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123

যদি টোকেনটি সঠিকভাবে স্বাক্ষরিত হয় এবং iss এবং exp দাবির প্রত্যাশিত মান থাকে, তাহলে আপনি একটি HTTP 200 প্রতিক্রিয়া পাবেন, যেখানে মূল অংশে JSON- ফরম্যাটেড আইডি টোকেন দাবিগুলি রয়েছে৷ এখানে একটি উদাহরণ প্রতিক্রিয়া:

{
 // These six fields are included in all Google ID Tokens.
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953",

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
}

আপনি যদি আইডি টোকেনটি Google Workspace অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি hd দাবিটি পরীক্ষা করতে পারেন, যা ব্যবহারকারীর হোস্ট করা ডোমেন নির্দেশ করে। শুধুমাত্র নির্দিষ্ট ডোমেনের সদস্যদের জন্য একটি সম্পদের অ্যাক্সেস সীমাবদ্ধ করার সময় এটি অবশ্যই ব্যবহার করা উচিত। এই দাবির অনুপস্থিতি নির্দেশ করে যে অ্যাকাউন্টটি Google Workspace হোস্ট করা ডোমেনের অন্তর্গত নয়।

একটি অ্যাকাউন্ট বা সেশন তৈরি করুন

আপনি টোকেন যাচাই করার পরে, ব্যবহারকারী ইতিমধ্যে আপনার ব্যবহারকারী ডাটাবেসে আছে কিনা তা পরীক্ষা করুন। যদি তাই হয়, ব্যবহারকারীর জন্য একটি প্রমাণীকৃত সেশন স্থাপন করুন। যদি ব্যবহারকারী এখনও আপনার ব্যবহারকারী ডাটাবেসে না থাকে, তাহলে আইডি টোকেন পেলোডের তথ্য থেকে একটি নতুন ব্যবহারকারীর রেকর্ড তৈরি করুন এবং ব্যবহারকারীর জন্য একটি সেশন স্থাপন করুন। আপনি যখন আপনার অ্যাপে নতুন তৈরি করা ব্যবহারকারীকে শনাক্ত করেন তখন আপনার প্রয়োজনীয় যেকোন অতিরিক্ত প্রোফাইল তথ্যের জন্য আপনি ব্যবহারকারীকে অনুরোধ করতে পারেন।

ক্রস অ্যাকাউন্ট সুরক্ষা দিয়ে আপনার ব্যবহারকারীদের অ্যাকাউন্ট সুরক্ষিত করা

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