इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

बैकएंड सर्वर के साथ प्रमाणीकरण

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

अपने सर्वर पर आईडी टोकन भेजें

उपयोगकर्ता द्वारा सफलतापूर्वक साइन इन करने के बाद, उपयोगकर्ता की आईडी टोकन प्राप्त करें:

function onSignIn(googleUser) {
  var id_token = googleUser.getAuthResponse().id_token;
  ...
}

फिर, HTTPS POST अनुरोध के साथ अपने सर्वर पर आईडी टोकन भेजें:

var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://yourbackend.example.com/tokensignin');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
  console.log('Signed in as: ' + xhr.responseText);
};
xhr.send('idtoken=' + id_token);

आईडी टोकन की अखंडता की पुष्टि करें

HTTPS POST द्वारा ID टोकन प्राप्त करने के बाद, आपको टोकन की अखंडता को सत्यापित करना होगा। यह सत्यापित करने के लिए कि टोकन मान्य है, सुनिश्चित करें कि निम्नलिखित मानदंड संतुष्ट हैं:

  • आईडी टोकन Google द्वारा ठीक से हस्ताक्षरित है। टोकन के हस्ताक्षर को सत्यापित करने के लिए Google की सार्वजनिक कुंजियों ( JWK या PEM प्रारूप में उपलब्ध) का उपयोग करें। इन कुंजियों को नियमित रूप से घुमाया जाता है; जब आप उन्हें फिर से प्राप्त करना चाहिए, यह निर्धारित करने के लिए प्रतिक्रिया में Cache-Control हेडर की जांच करें।
  • आईडी टोकन में aud का मान आपके ऐप के क्लाइंट आईडी के बराबर है। यह जाँच आवश्यक है कि आपके ऐप के बैकएंड सर्वर पर उसी उपयोगकर्ता के डेटा तक पहुँचने के लिए उपयोग किए जा रहे दुर्भावनापूर्ण ऐप के लिए जारी किए गए आईडी टोकन को रोका जाए।
  • आईडी टोकन में iss का मान, accounts.google.com या https://accounts.google.com बराबर है।
  • आईडी टोकन का एक्सपायरी टाइम ( exp ) समाप्त नहीं हुआ है।
  • यदि आप अपने जी सूट डोमेन के केवल सदस्यों तक पहुंच को प्रतिबंधित करना चाहते हैं, तो सत्यापित करें कि आईडी टोकन में एक hd दावा है जो आपके जी सूट डोमेन नाम से मेल खाता है।

इन सत्यापन चरणों को करने के लिए अपना स्वयं का कोड लिखने के बजाय, हम दृढ़ता से आपके प्लेटफ़ॉर्म या सामान्य-उद्देश्य वाले JWT लाइब्रेरी के लिए Google API क्लाइंट लाइब्रेरी का उपयोग करने की सलाह देते हैं। विकास और डिबगिंग के लिए, आप हमारे tokeninfo सत्यापन सत्यापन बिंदु पर कॉल कर सकते हैं।

Google API क्लाइंट लाइब्रेरी का उपयोग करना

Google API क्लाइंट पुस्तकालयों (जैसे जावा , Node.js , PHP , Python ) में से एक का उपयोग करना Google ID टोकन को उत्पादन परिवेश में मान्य करने का अनुशंसित तरीका है।

जावा

जावा में एक आईडी टोकन को मान्य करने के लिए, 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() विधि सत्यापन जेडब्ल्यूटी हस्ताक्षर, aud दावा, iss दावा करते हैं और exp दावा।

यदि आप अपने G सुइट डोमेन के केवल सदस्यों तक पहुँच को प्रतिबंधित करना चाहते हैं, तो भी Payload.getHostedDomain() विधि द्वारा लौटाए गए डोमेन नाम की जाँच करके hd दावे को सत्यापित करें।

Node.js

Node.js में एक आईडी टोकन को मान्य करने के लिए, Node.js के लिए Google प्रामाणिक लाइब्रेरी का उपयोग करें। लाइब्रेरी स्थापित करें:

npm install google-auth-library --save
फिर, verifyIdToken() फ़ंक्शन को कॉल करें। उदाहरण के लिए:

const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client(CLIENT_ID);
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 समारोह सत्यापन जेडब्ल्यूटी हस्ताक्षर, aud दावा, exp दावा करते हैं और iss दावा।

यदि आप अपने G सुइट डोमेन के केवल सदस्यों तक पहुँच को प्रतिबंधित करना चाहते हैं, तो यह भी सत्यापित करें कि hd दावा आपके G सूट डोमेन नाम से मेल खाता है।

पीएचपी

PHP में एक ID टोकन को मान्य करने के लिए, PHP के लिए 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 समारोह सत्यापन जेडब्ल्यूटी हस्ताक्षर, aud दावा, exp दावा करते हैं और iss दावा।

यदि आप अपने G सुइट डोमेन के केवल सदस्यों तक पहुंच को प्रतिबंधित करना चाहते हैं, तो यह भी दावा करें कि hd दावा आपके G सूट डोमेन नाम से मेल खाता है।

अजगर

पायथन में एक आईडी टोकन को सत्यापित करने के लिए, 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 समारोह सत्यापन जेडब्ल्यूटी हस्ताक्षर, aud दावा करते हैं और exp दावा। आपको उस ऑब्जेक्ट की जांच करके hd दावे (यदि लागू हो) को भी सत्यापित करना चाहिए जो verify_oauth2_token रिटर्न देता है। यदि कई क्लाइंट बैकएंड सर्वर का उपयोग करते हैं, तो भी मैन्युअल रूप से aud क्लेम को सत्यापित करें।

टोकनइनफॉइंट समापन बिंदु पर कॉल करना

एक आसान तरीका है डिबगिंग के लिए एक आईडी टोकन हस्ताक्षर मान्य करने के लिए उपयोग करने के लिए है tokeninfo endpoint। इस समापन बिंदु को कॉल करने पर एक अतिरिक्त नेटवर्क अनुरोध शामिल होता है जो आपके लिए अपने कोड में उचित सत्यापन और पेलोड निष्कर्षण का परीक्षण करते समय आपके लिए अधिकांश सत्यापन करता है। यह उत्पादन कोड में उपयोग के लिए उपयुक्त नहीं है क्योंकि अनुरोध थ्रॉटल किए जा सकते हैं या अन्यथा आंतरायिक त्रुटियों के अधीन हो सकते हैं।

का उपयोग कर टोकन एक आईडी प्रमाणित करने के लिए tokeninfo समाप्ति बिंदु, एक HTTPS पोस्ट कर सकते हैं या समाप्ति बिंदु को अनुरोध मिलता है, और में टोकन अपने आईडी पारित 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"
}

यदि आप एक जी सूट ग्राहक हैं, तो आप hd दावे में भी रुचि ले सकते हैं, जो उपयोगकर्ता के होस्ट किए गए डोमेन को इंगित करता है। इसका उपयोग कुछ डोमेन के केवल सदस्यों के लिए संसाधन तक पहुंच को प्रतिबंधित करने के लिए किया जा सकता है। इस दावे का न होना यह दर्शाता है कि उपयोगकर्ता G सुइट होस्टेड डोमेन से संबंधित नहीं है।

एक खाता या सत्र बनाएँ

आपके द्वारा टोकन सत्यापित करने के बाद, जांच लें कि उपयोगकर्ता आपके उपयोगकर्ता डेटाबेस में पहले से मौजूद है या नहीं। यदि हां, तो उपयोगकर्ता के लिए एक प्रमाणित सत्र स्थापित करें। यदि उपयोगकर्ता आपके उपयोगकर्ता डेटाबेस में अभी तक नहीं है, तो आईडी टोकन पेलोड में जानकारी से एक नया उपयोगकर्ता रिकॉर्ड बनाएं, और उपयोगकर्ता के लिए एक सत्र स्थापित करें। जब आप अपने ऐप में एक नए बनाए गए उपयोगकर्ता का पता लगाते हैं, तो आप किसी भी अतिरिक्त प्रोफ़ाइल जानकारी के लिए उपयोगकर्ता को संकेत दे सकते हैं।

अपने उपयोगकर्ताओं के खातों को क्रॉस खाता संरक्षण के साथ सुरक्षित करना

जब आप किसी उपयोगकर्ता में साइन इन करने के लिए Google पर भरोसा करते हैं, तो आप सभी सुरक्षा सुविधाओं और बुनियादी सुविधाओं से लाभान्वित होंगे, जो Google ने उपयोगकर्ता के डेटा को सुरक्षित रखने के लिए बनाया है। हालाँकि, उपयोगकर्ता के Google खाते से छेड़छाड़ होने की संभावना नहीं है या किसी अन्य महत्वपूर्ण सुरक्षा घटना के कारण, आपका ऐप भी हमले की चपेट में आ सकता है। किसी भी बड़ी सुरक्षा घटनाओं से अपने खातों की बेहतर सुरक्षा के लिए, Google से सुरक्षा अलर्ट प्राप्त करने के लिए क्रॉस अकाउंट प्रोटेक्शन का उपयोग करें। जब आप इन घटनाओं को प्राप्त करते हैं, तो आप उपयोगकर्ता के Google खाते की सुरक्षा के लिए महत्वपूर्ण परिवर्तनों में दृश्यता प्राप्त करते हैं और फिर आप अपने खातों को सुरक्षित करने के लिए अपनी सेवा पर कार्रवाई कर सकते हैं।