सुरक्षा बंडल

इस गाइड में, उन सुविधाओं के कलेक्शन के बारे में बताया गया है जिनसे Google खाते के बारे में, भरोसेमंद होने के अतिरिक्त सिग्नल मिलते हैं. इन भरोसेमंद सिग्नल की मदद से, आपका खाता मैनेजमेंट सिस्टम, साइन अप और खाता बनाने के दौरान, जोखिम के आधार पर फ़ैसले ले पाता है. साथ ही, वापस आने वाले उपयोगकर्ताओं के लिए भी फ़ैसले ले पाता है.

सेटअप

अतिरिक्त दावे पाने के लिए, आपका ऐप्लिकेशन पब्लिश, पुष्टि किया गया होना चाहिए. साथ ही, उसमें सुरक्षा बंडल की सुविधाएं चालू होनी चाहिए.

इस बात की पुष्टि करने के लिए कि आपका ऐप्लिकेशन पब्लिश और पुष्टि किया गया है:

  1. Google Auth Platform खोलें
  2. अपने ऐप्लिकेशन के लिए कोई प्रोजेक्ट चुनें या बनाएं
  3. मेन्यू में ऑडियंस पर क्लिक करें
  4. पब्लिशिंग स्टेटस की वैल्यू इन प्रोडक्शन है या नहीं, इसकी पुष्टि करें
  5. मेन्यू में पुष्टि केंद्र पर क्लिक करें
  6. पुष्टि का स्टेटस की वैल्यू पुष्टि हो चुकी है है या नहीं, इसकी पुष्टि करें.

    ज़्यादा जानने के लिए, OAuth ऐप्लिकेशन की पुष्टि करने से जुड़े सहायता केंद्र पर जाएं.

auth_time दावा चालू करने के लिए:

  1. Google Auth Platform खोलें
  2. अपने ऐप्लिकेशन के लिए कोई प्रोजेक्ट चुनें या बनाएं
  3. मेन्यू में सेटिंग पर क्लिक करें
  4. ऐडवांस सेटिंग में जाकर, सेशन की अवधि के दावे को चुनें, ताकि auth_time चालू किया जा सके.

इस्तेमाल की जा सकने वाली सुविधाएं

इस सेक्शन में, उन अलग-अलग सुविधाओं के बारे में बताया गया है जो सुरक्षा बंडल का हिस्सा हैं.

auth_time

auth_time दावा, OpenID Connect प्रोटोकॉल का एक स्टैंडर्ड हिस्सा है इससे यह जानकारी मिलती है कि असली उपयोगकर्ता ने Google के साथ, पिछली बार कब पुष्टि की थी. यह एक JSON नंबर है, जो Unix epoch (1 जनवरी, 1970, 00:00:00 यूटीसी) से लेकर, उपयोगकर्ता की पिछली पुष्टि के समय तक के सेकंड की संख्या दिखाता है. इसे एक टाइमस्टैंप के तौर पर समझें, जो मौजूदा डिवाइस या ब्राउज़र से, उपयोगकर्ता के Google खाते में पिछली बार लॉगिन करने की जानकारी दिखाता है. यह दावा, आईडी टोकन में शामिल होता है. यह एक JSON Web Token (JWT) है, जिसमें पुष्टि और उपयोगकर्ता के बारे में पुष्टि की गई जानकारी होती है.

auth_time दावा, आपके ऐप्लिकेशन के लिए अहम है, क्योंकि इससे यह पता चलता है कि उपयोगकर्ता ने, इस्तेमाल किए जा रहे डिवाइस या ब्राउज़र पर, Google खाते में पिछली बार कब लॉग इन किया था. सुरक्षा के लिहाज़ से यह दावा खास तौर पर अहम हो सकता है. जैसे:

  • संवेदनशील उपयोगकर्ता कार्रवाइयां करने से पहले, जैसे कि खाता मिटाना, खाते के संपर्क के तरीके बदलना या पेमेंट करना, यह तय करना कि आपके ऐप्लिकेशन को पुष्टि के लिए, एक और चुनौती देनी चाहिए या नहीं. Google, Google खाते की फिर से पुष्टि करने के अनुरोधों के साथ काम नहीं करता.

  • उपयोगकर्ता के Google खाते के सेशन की नई और स्थिर स्थिति को, भरोसेमंद सिग्नल के तौर पर इस्तेमाल करना. आम तौर पर, auth_time की नई वैल्यू, नई स्थिति की जानकारी देती है. वहीं, पुरानी वैल्यू, स्थिर स्थिति की जानकारी देती है.

वेब ऐप्लिकेशन के लिए, उपयोगकर्ता के Google खाते में साइन इन करने के बाद, उसके ब्राउज़र और ऑपरेटिंग सिस्टम के कॉम्बिनेशन को एक सेशन माना जाता है. आपकी वेबसाइट भी, उपयोगकर्ता के लिए अलग से सेशन बनाए रखती है. auth_time की नई वैल्यू से पता चलता है कि उपयोगकर्ता ने हाल ही में अपने Google खाते में साइन इन किया है. अक्सर, यह सक्रिय और दिलचस्पी दिखाने वाले उपयोगकर्ता की जानकारी होती है. इसे कम जोखिम वाले सिग्नल के तौर पर समझा जा सकता है.

Android जैसे मोबाइल प्लैटफ़ॉर्म पर, उपयोगकर्ता आम तौर पर सीधे अपने डिवाइस में साइन इन करते हैं. इसके लिए, वे बायोमेट्रिक तरीकों का इस्तेमाल करते हैं. जैसे, फ़िंगरप्रिंट या चेहरे को स्कैन करना. इसके अलावा, वे डिवाइस के हिसाब से पिन या पैटर्न अनलॉक का भी इस्तेमाल करते हैं. मोबाइल ऐप्लिकेशन और प्लैटफ़ॉर्म अक्सर, Google के साथ नया सेशन बनाने के बजाय, प्लैटफ़ॉर्म पर आधारित पुष्टि के इन तरीकों का इस्तेमाल करते हैं. इससे, Google खाते में कम बार साइन इन किया जाता है और auth_time में भी कम बार अपडेट होता है. इसलिए, auth_time की नई वैल्यू से, Google खाते के लंबे समय से चल रहे सेशन में बदलाव का पता चल सकता है. इससे जोखिम बढ़ सकता है.

भरोसेमंद सिग्नल एक जटिल विषय है. auth_time का इस्तेमाल, अन्य सिग्नल के साथ किया जाना चाहिए. जैसे, बहु-स्तरीय पुष्टि (MFA) की सुविधा चालू है या नहीं, पुष्टि के लिए इस्तेमाल किया गया तरीका, और आपके ऐप्लिकेशन और प्लैटफ़ॉर्म के बीच उपयोगकर्ता के सेशन की अवधि.

auth_time के लिए अनुरोध

auth_time दावे के लिए अनुरोध करने का तरीका, इस्तेमाल किए गए एपीआई के हिसाब से अलग-अलग होता है. हालांकि, हर एपीआई में auth_time के लिए अनुरोध करने के लिए, एक वैकल्पिक claims पैरामीटर शामिल होता है.

OIDC प्रोटोकॉल

OAuth प्लैटफ़ॉर्म का सीधे तौर पर इस्तेमाल करते समय, auth_time के लिए अनुरोध करने के लिए, इसे वैकल्पिक दावे के अनुरोध वाले पैरामीटर में जोड़ें. दावों के JSON ऑब्जेक्ट के id_token फ़ील्ड की वैल्यू को {"auth_time":{"essential":true}} पर सेट करें. उदाहरण के लिए,

https://accounts.google.com/o/oauth2/v2/auth?
response_type=id_token&
client_id=YOUR_CLIENT_ID&
scope=openid email profile&
redirect_uri=https://example.com/user-login&
nonce=123-456-7890&
claims={"id_token":{"auth_time":{"essential":true}}}

ज़्यादा जानकारी के लिए, OpenID Connect देखें.

वेब के लिए जीआईएस

वेब के लिए, 'Google से साइन इन करें' लाइब्रेरी में, अतिरिक्त दावे के लिए अनुरोध करने के लिए दो एपीआई होते हैं: एचटीएमएल और JavaScript. उदाहरण के लिए, JavaScript API का इस्तेमाल करके, auth_time के लिए अनुरोध करें:

<html>
<body>
  <script src="https://accounts.google.com/gsi/client" async></script>
  <script>
    window.onload = function () {
      google.accounts.id.initialize({
        client_id: "YOUR_WEB_CLIENT_ID",
        callback: function(rsp) { console.log(rsp.credential); },
        essential_claims: "auth_time",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

ज़्यादा जानकारी के लिए, वेब के लिए 'Google से साइन इन करें' देखें.

Android के लिए जीआईएस

auth_time के लिए अनुरोध करने के लिए, setClaims तरीके और Claim ऑब्जेक्ट का इस्तेमाल किया जाता है.

androidx.credentials:credentials-play-services-auth और com.google.android.libraries.identity.googleid:googleid लाइब्रेरी के सबसे नए वर्शन का इस्तेमाल करने के लिए, अपनी बिल्ड डिपेंडेंसी अपडेट करें.

Claim टाइप का auth_time ऑब्जेक्ट इंस्टैंशिएट करें. साथ ही, साइन-इन के विकल्पों में इसे जोड़ने के लिए, setClaims का इस्तेमाल करें:

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(new Claim("auth_time", true)))
    .build()

ज़्यादा जानकारी के लिए, 'Google से साइन इन करें' की मदद से, उपयोगकर्ताओं की पुष्टि करना देखें.

iOS

iOS के लिए, Google से साइन इन करें SDK टूल, GIDSignIn क्लास में authTimeClaim ऑब्जेक्ट और claims पैरामीटर जोड़ता है. इसका इस्तेमाल, वैकल्पिक तौर पर auth_time के लिए अनुरोध करने के लिए किया जाता है.

ASWebAuthenticationSession का इस्तेमाल करने वाले ऐप्लिकेशन, डिवाइस के लिए शेयर की गई कुकी जार को अपडेट करते हैं. GIDSignIn , iOS 12 या इसके बाद के वर्शन और macOS 12.16 या इसके बाद के वर्शन में, डिफ़ॉल्ट रूप से इस तरीके का इस्तेमाल करता है. इस मामले में, अपने Google खाते में साइन इन करने वाले उपयोगकर्ता की पुष्टि हो जाती है और सेशन को शेयर की गई कुकी जार में सेव कर लिया जाता है. यहां auth_time, डिवाइस पर Google की पिछली पुष्टि का समय है. यह सिर्फ़ आपके ऐप्लिकेशन में नहीं है.

SFSafariViewController, WKWebView, और UIWebView, आपके ऐप्लिकेशन में अलग-अलग सैंडबॉक्स में काम करते हैं. इसलिए, auth_time का इस्तेमाल करते समय, इनका इस्तेमाल न करें. यहां auth_time, ऐप्लिकेशन में उपयोगकर्ता के पिछली बार साइन इन करने का समय है. इसकी वैल्यू हमेशा नई होती है, इसलिए यह ज़्यादा काम की नहीं होती.

auth_time के लिए अनुरोध करने के लिए, GoogleSignIn डिपेंडेंसी को सबसे नए वर्शन में अपडेट करें और एक authTimeClaim ऑब्जेक्ट बनाएं. इसके बाद, इसे claims सेट में जोड़ें.

Swift

GIDSignIn.sharedInstance.signIn तरीके में, दावे का सेट जोड़ें:

let authTimeClaim = GIDClaim.authTime()
let claims = Set([authTimeClaim])

// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }

Objective-C

signInWithPresentingViewController तरीके में, दावे का सेट जोड़ें:

GIDClaim *authTimeClaim = [GIDClaim authTimeClaim];
NSSet *claims = [NSSet setWithObject:authTimeClaim];

// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];

ज़्यादा जानकारी के लिए, अपने iOS या macOS ऐप्लिकेशन में 'Google से साइन इन करें' को इंटिग्रेट करना देखें.

auth_time का जवाब

जब अनुरोध में auth_time दावा शामिल किया जाता है, तो यह आईडी टोकन के पेलोड के जवाब में, अन्य स्टैंडर्ड दावों के साथ दिखता है. जैसे, iss (जारी करने वाला), sub (विषय), aud (ऑडियंस), और exp (एक्सपायर होने का समय). auth_time दावे की वैल्यू एक JSON नंबर है, जो Unix epoch (1 जनवरी, 1970, 00:00:00 यूटीसी) से लेकर, उपयोगकर्ता की पिछली पुष्टि के समय तक के सेकंड की संख्या दिखाता है. यहां, डिकोड किए गए आईडी टोकन का एक उदाहरण दिया गया है, जिसमें auth_time दावा शामिल है:

{
  "iss": "https://accounts.google.com",
  "azp": "YOUR_CLIENT_ID",
  "aud": "YOUR_CLIENT_ID",
  "sub": "117726431651943698600",
  "email": "alice@example.com",
  "email_verified": true,
  "nonce": "123-456-7890",
  "auth_time": 1748875426,
  "nbf": 1748880889,
  "name": "Elisa Beckett",
  "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c",
  "given_name": "Elisa",
  "family_name": "Beckett",
  "iat": 1748881189,
  "exp": 1748884789,
  "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1"
}

आईडी टोकन में iat (जारी करने का समय) दावा भी शामिल होता है. इससे पता चलता है कि JWT कब जारी किया गया था. iat और auth_time दावों की तुलना करके, यह पता लगाया जा सकता है कि खास आईडी टोकन कब बनाया गया था और उपयोगकर्ता की पिछली पुष्टि के बाद से कितना समय बीत चुका है. उदाहरण के लिए, अगर iat की वैल्यू 1748881189 है और auth_time की वैल्यू 1748875426 है, तो दोनों के बीच 5763 सेकंड का अंतर है. इसका मतलब है कि 1 घंटा, 36 मिनट, और 3 सेकंड बीत चुके हैं.