यह दस्तावेज़ बताता है कि वेब सर्वर ऐप्लिकेशन कैसे Google API क्लाइंट लाइब्रेरी या Google का इस्तेमाल करते हैं ऐक्सेस करने के लिए, OAuth 2.0 की अनुमति लागू करने के लिए, OAuth 2.0 एंडपॉइंट Google API.
OAuth 2.0 की मदद से, उपयोगकर्ता किसी ऐप्लिकेशन के साथ चुनिंदा डेटा शेयर कर सकते हैं. इस दौरान उपयोगकर्ता नाम, पासवर्ड, और अन्य जानकारी निजी रखें. उदाहरण के लिए, कोई ऐप्लिकेशन अनुमति पाने के लिए OAuth 2.0 का इस्तेमाल कर सकता है उपयोगकर्ताओं को अपने Google Drive में फ़ाइलें सेव करने के लिए बढ़ावा दें.
यह OAuth 2.0 फ़्लो, खास तौर पर उपयोगकर्ता की अनुमति के लिए है. इसे ऐप्लिकेशन के लिए डिज़ाइन किया गया है जो गोपनीय जानकारी को स्टोर कर सके और स्थिति को बनाए रख सके. सही तरीके से अनुमति वाला वेब सर्वर जब उपयोगकर्ता ऐप्लिकेशन से इंटरैक्ट करता है या उपयोगकर्ता के बाद वह ऐप्लिकेशन इस्तेमाल करता है, तब ऐप्लिकेशन किसी एपीआई को ऐक्सेस कर सकता है ने ऐप्स छोड़ दिया है.
वेब सर्वर एप्लिकेशन अक्सर का भी उपयोग करते हैं एपीआई अनुरोधों को अनुमति देने के लिए सेवा खाते. खास तौर पर, ऐक्सेस के लिए Cloud API को कॉल करते समय उपयोगकर्ता-विशिष्ट डेटा के बजाय प्रोजेक्ट-आधारित डेटा का उपयोग करें. वेब सर्वर ऐप्लिकेशन, सेवा का इस्तेमाल कर सकते हैं उपयोगकर्ता की अनुमति के साथ जुड़े हुए खाते.
क्लाइंट लाइब्रेरी
इस पेज पर भाषा के हिसाब से दिए गए उदाहरण लागू करने के लिए, Google API क्लाइंट लाइब्रेरी OAuth 2.0 अनुमति. कोड सैंपल चलाने के लिए, आपको पहले क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.
जब अपने ऐप्लिकेशन के OAuth 2.0 फ़्लो को मैनेज करने के लिए, Google API क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है, तो क्लाइंट लाइब्रेरी ऐसी कई कार्रवाइयां करती है जिन्हें आम तौर पर ऐप्लिकेशन को खुद मैनेज करना पड़ता है. इसके लिए उदाहरण के लिए, यह तय करता है कि ऐप्लिकेशन कब सेव किए गए ऐक्सेस टोकन को इस्तेमाल या रीफ़्रेश कर सकता है जब ऐप्लिकेशन को फिर से सहमति लेनी होगी. क्लाइंट लाइब्रेरी सही रीडायरेक्ट भी जनरेट करती है यूआरएल और ऐसे रीडायरेक्ट हैंडलर लागू करने में मदद करते हैं जो ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड का लेन-देन करते हैं.
सर्वर-साइड ऐप्लिकेशन के लिए Google API क्लाइंट लाइब्रेरी इन भाषाओं में उपलब्ध है:
ज़रूरी शर्तें
अपने प्रोजेक्ट के लिए एपीआई चालू करना
अगर कोई ऐप्लिकेशन Google API को कॉल करता है, तो उसे API Console.
अपने प्रोजेक्ट के लिए एपीआई चालू करने के लिए:
- Open the API Library Google API Console.
- If prompted, select a project, or create a new one.
- API Library में, प्रॉडक्ट के हिसाब से ग्रुप किए गए सभी उपलब्ध एपीआई की सूची दी गई है परिवार और लोकप्रियता. आपको जिस एपीआई को चालू करना है अगर वह सूची में नहीं दिख रहा है, तो खोजने के लिए खोज का इस्तेमाल करें इसे ढूंढें या इसके प्रॉडक्ट फ़ैमिली में सभी देखें पर क्लिक करें.
- वह एपीआई चुनें जिसे आपको चालू करना है. इसके बाद, चालू करें बटन पर क्लिक करें.
- If prompted, enable billing.
- If prompted, read and accept the API's Terms of Service.
अनुमति देने वाले क्रेडेंशियल बनाएं
Google API को ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करने वाले किसी भी ऐप्लिकेशन के पास, अनुमति देने वाले क्रेडेंशियल होने चाहिए जो Google के OAuth 2.0 सर्वर पर ऐप्लिकेशन की पहचान करती है. यहां दिए गए चरण, अपने प्रोजेक्ट के लिए क्रेडेंशियल बनाएं. इसके बाद, आपके ऐप्लिकेशन एपीआई ऐक्सेस करने के लिए क्रेडेंशियल का इस्तेमाल कर सकते हैं जिसे आपने उस प्रोजेक्ट के लिए चालू किया है.
- Go to the Credentials page.
- क्रेडेंशियल बनाएं > OAuth क्लाइंट आईडी.
- वेब ऐप्लिकेशन ऐप्लिकेशन का प्रकार चुनें.
- फ़ॉर्म भरें और बनाएं पर क्लिक करें. भाषाओं और फ़्रेमवर्क का इस्तेमाल करने वाले ऐप्लिकेशन
जैसे कि PHP, Java, Python, Ruby, और .NET को रीडायरेक्ट यूआरआई की जानकारी देनी होगी. कॉन्टेंट बनाने
रीडायरेक्ट यूआरआई वे एंडपॉइंट हैं जिन पर OAuth 2.0 सर्वर जवाब भेज सकता है. ये
एंडपॉइंट को Google के पुष्टि करने के नियमों का पालन करना होगा.
जांच के लिए, आप ऐसे यूआरआई तय कर सकते हैं जो लोकल मशीन से जुड़े हैं, जैसे
http://localhost:8080
. इसे ध्यान में रखते हुए, कृपया ध्यान दें कि इस दस्तावेज़ के उदाहरणों में, रीडायरेक्ट यूआरआई के तौर परhttp://localhost:8080
का इस्तेमाल किया गया है.हमारा सुझाव है कि आप अपने ऐप्लिकेशन के पुष्टि करने वाले एंडपॉइंट डिज़ाइन करें, कि आपका ऐप्लिकेशन अन्य संसाधनों को पेज.
अपने क्रेडेंशियल बनाने के बाद, client_secret.json फ़ाइल API Console. फ़ाइल को सिर्फ़ ऐसी जगह पर सुरक्षित रखें जहां आपका ऐप्लिकेशन ऐक्सेस कर सकता है.
ऐक्सेस के दायरों की पहचान करना
स्कोप की वजह से आपका ऐप्लिकेशन, सिर्फ़ उन संसाधनों के ऐक्सेस का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, ताकि उपयोगकर्ता आपके ऐप्लिकेशन को दिए जाने वाले ऐक्सेस की मात्रा को कंट्रोल कर सकें. इसलिए, यहां हो सकता है कि अनुरोध किए गए दायरों की संख्या और उपयोगकर्ता की सहमति लेना न भूलें.
OAuth 2.0 ऑथराइज़ेशन लागू करने से पहले, हमारा सुझाव है कि आप स्कोप की पहचान कर लें जिसे ऐक्सेस करने के लिए आपके ऐप्लिकेशन को अनुमति की ज़रूरत होगी.
हम यह भी सुझाव देते हैं कि आपका ऐप्लिकेशन, बढ़ोतरी के साथ अनुमति देने की प्रक्रिया, जिसमें आपका आवेदन जो कॉन्टेक्स्ट के हिसाब से उपयोगकर्ता के डेटा के ऐक्सेस का अनुरोध करता है. इस सबसे सही तरीके की मदद से, लोगों को आपके ऐप्लिकेशन को उसके अनुरोध किए जा रहे ऐक्सेस की ज़रूरत क्यों है.
OAuth 2.0 API के दायरे दस्तावेज़ में, उन दायरों की सूची जिनका इस्तेमाल Google API को ऐक्सेस करने के लिए किया जा सकता है.
भाषा के हिसाब से ज़रूरी शर्तें
इस दस्तावेज़ के किसी भी कोड सैंपल को चलाने के लिए, आपके पास Google खाता होना चाहिए. साथ ही, इंटरनेट और एक वेब ब्राउज़र. अगर किसी एपीआई क्लाइंट लाइब्रेरी का इस्तेमाल किया जा रहा है, तो यह भी देखें: अलग-अलग भाषाओं के लिए तय की गई ज़रूरी शर्तों के बारे में नीचे बताया गया है.
PHP
इस दस्तावेज़ में PHP कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:
- कमांड-लाइन इंटरफ़ेस (CLI) और JSON एक्सटेंशन के साथ PHP 5.6 या इससे बाद का वर्शन.
- Composer डिपेंडेंसी मैनेजमेंट टूल.
-
PHP के लिए Google API क्लाइंट लाइब्रेरी:
composer require google/apiclient:^2.10
Python
इस दस्तावेज़ में Python कोड के सैंपल चलाने के लिए, आपको इनकी ज़रूरत होगी:
- Python 2.6 या इससे नया वर्शन
- पीआईपी पैकेज मैनेजमेंट टूल.
- Python के लिए Google API क्लाइंट लाइब्रेरी:
pip install --upgrade google-api-python-client
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है google-auth
,google-auth-oauthlib
, और उपयोगकर्ता की अनुमति के लिएgoogle-auth-httplib2
.pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
- Flusk Python वेब ऐप्लिकेशन फ़्रेमवर्क.
pip install --upgrade flask
requests
एचटीटीपी लाइब्रेरी.pip install --upgrade requests
Ruby
इस दस्तावेज़ में Ruby कोड के सैंपल चलाने के लिए, आपको इनकी ज़रूरत होगी:
- Ruby 2.6 या इससे नया वर्शन
-
Ruby के लिए Google पुष्टि लाइब्रेरी:
gem install googleauth
-
Ciatra Ruby वेब ऐप्लिकेशन का फ़्रेमवर्क.
gem install sinatra
Node.js
इस दस्तावेज़ में Node.js कोड के सैंपल चलाने के लिए, आपको इनकी ज़रूरत होगी:
- रखरखाव एलटीएस, चालू एलटीएस या Node.js की मौजूदा रिलीज़.
-
Google API Node.js क्लाइंट:
npm install googleapis crypto express express-session
एचटीटीपी/REST
सीधे OAuth 2.0 को कॉल करने के लिए, आपको कोई लाइब्रेरी इंस्टॉल करने की ज़रूरत नहीं है एंडपॉइंट के बारे में भी बताएंगे.
OAuth 2.0 ऐक्सेस टोकन पाना
नीचे दिए गए चरण दिखाते हैं कि आपका ऐप्लिकेशन, एपीआई का इस्तेमाल करने के लिए Google के OAuth 2.0 सर्वर के साथ कैसे इंटरैक्ट करता है उपयोगकर्ता की ओर से एपीआई अनुरोध करने के लिए, उपयोगकर्ता की सहमति. आपके ऐप्लिकेशन में वह होना चाहिए उपयोगकर्ता की अनुमति की ज़रूरत होती है.
नीचे दी गई सूची में इन चरणों का तुरंत सारांश दिया गया है:
- आपका ऐप्लिकेशन उन अनुमतियों की पहचान करता है जिनकी उसे ज़रूरत होती है.
- आपका ऐप्लिकेशन, अनुरोध की गई सूची के साथ उपयोगकर्ता को Google पर रीडायरेक्ट करता है अनुमतियां दी हैं.
- उपयोगकर्ता तय करता है कि आपके ऐप्लिकेशन को अनुमतियां देनी हैं या नहीं.
- आपके ऐप्लिकेशन से पता चलता है कि उपयोगकर्ता ने क्या फ़ैसला लिया.
- अगर उपयोगकर्ता ने अनुरोध की गई अनुमतियां दी हैं, तो आपका ऐप्लिकेशन इन कामों के लिए ज़रूरी टोकन हासिल करता है उपयोगकर्ता की ओर से एपीआई अनुरोध करें.
पहला चरण: अनुमति देने वाले पैरामीटर सेट करना
सबसे पहले, अनुमति पाने के लिए अनुरोध करें. वह अनुरोध, ऐसे पैरामीटर सेट करता है अपने ऐप्लिकेशन की पहचान करें और वे अनुमतियां परिभाषित करें, जो उपयोगकर्ता से दी जाएंगी आपका ऐप्लिकेशन.
- अगर OAuth 2.0 की पुष्टि करने और अनुमति देने के लिए, Google की क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है, तो इन पैरामीटर को तय करने वाला कोई ऑब्जेक्ट बनाएं और उसे कॉन्फ़िगर करें.
- अगर Google OAuth 2.0 एंडपॉइंट को सीधे कॉल किया जाता है, तो एक यूआरएल जनरेट किया जाएगा और पैरामीटर सेट कर सकता है.
नीचे दिए गए टैब, वेब सर्वर ऐप्लिकेशन के लिए काम करने वाले ऑथराइज़ेशन पैरामीटर को तय करते हैं. कॉन्टेंट बनाने किसी खास भाषा के उदाहरणों में, क्लाइंट लाइब्रेरी या अनुमति लाइब्रेरी इस्तेमाल करने का तरीका भी बताया गया है. कोई ऐसा ऑब्जेक्ट कॉन्फ़िगर करें जो उन पैरामीटर को सेट करे.
PHP
नीचे दिया गया कोड स्निपेट एक Google\Client()
ऑब्जेक्ट बनाता है, जो
पैरामीटर को अनुमति देने के अनुरोध में शामिल कर सकते हैं.
यह ऑब्जेक्ट आपकी client_secret.json फ़ाइल में मौजूद जानकारी का इस्तेमाल करता है, ताकि
का इस्तेमाल करें. (इसके बारे में ज़्यादा जानने के लिए अनुमति देने के क्रेडेंशियल बनाना देखें
फ़ाइल से मेल खाना चाहिए.) ऑब्जेक्ट उन दायरों की पहचान भी करता है जिनके लिए आपका ऐप्लिकेशन अनुमति का अनुरोध कर रहा है
आपके ऐप्लिकेशन के पुष्टि करने वाले एंडपॉइंट के यूआरएल को ऐक्सेस करने और उसके यूआरएल को ऐक्सेस करने के लिए, जो
Google का OAuth 2.0 सर्वर. आखिर में, कोड, वैकल्पिक access_type
सेट करता है और
include_granted_scopes
पैरामीटर.
उदाहरण के लिए, यह कोड किसी उपयोगकर्ता की Google डिस्क:
$client = new Google\Client(); // Required, call the setAuthConfig function to load authorization credentials from // client_secret.json file. $client->setAuthConfig('client_secret.json'); // Required, to set the scope value, call the addScope function $client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY); // Required, call the setRedirectUri function to specify a valid redirect URI for the // provided client_id $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); // Recommended, offline access will give you both an access and refresh token so that // your app can refresh the access token without user interaction. $client->setAccessType('offline'); // Recommended, call the setState function. Using a state value can increase your assurance that // an incoming connection is the result of an authentication request. $client->setState($sample_passthrough_value); // Optional, if your application knows which user is trying to authenticate, it can use this // parameter to provide a hint to the Google Authentication Server. $client->setLoginHint('[email protected]'); // Optional, call the setPrompt function to set "consent" will prompt the user for consent $client->setPrompt('consent'); // Optional, call the setIncludeGrantedScopes function with true to enable incremental // authorization $client->setIncludeGrantedScopes(true);
Python
नीचे दिया गया कोड स्निपेट इन्हें बनाने के लिए, google-auth-oauthlib.flow
मॉड्यूल का इस्तेमाल करता है
अनुमति देने का अनुरोध है.
कोड एक Flow
ऑब्जेक्ट बनाता है, जो इसका इस्तेमाल करके आपके ऐप्लिकेशन की पहचान करता है
client_secret.json फ़ाइल से मिली जानकारी, जिसे आपने इसके बाद डाउनलोड किया है
ऑथराइज़ेशन क्रेडेंशियल बनाना. वह ऑब्जेक्ट
उन दायरों और उनके URL के बारे में जहां आपका ऐप्लिकेशन ऐक्सेस की अनुमति का अनुरोध कर रहा है
auth एंडपॉइंट, जो कि Google के OAuth 2.0 सर्वर से रिस्पॉन्स को हैंडल करेगा. आखिर में, कोड
वैकल्पिक access_type
और include_granted_scopes
पैरामीटर सेट करता है.
उदाहरण के लिए, यह कोड किसी उपयोगकर्ता की Google डिस्क:
import google.oauth2.credentials import google_auth_oauthlib.flow # Required, call the from_client_secrets_file method to retrieve the client ID from a # client_secret.json file. The client ID (from that file) and access scopes are required. (You can # also use the from_client_config method, which passes the client configuration as it originally # appeared in a client secrets file but doesn't access the file itself.) flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly']) # Required, indicate where the API server will redirect the user after the user completes # the authorization flow. The redirect URI is required. The value must exactly # match one of the authorized redirect URIs for the OAuth 2.0 client, which you # configured in the API Console. If this value doesn't match an authorized URI, # you will get a 'redirect_uri_mismatch' error. flow.redirect_uri = 'https://www.example.com/oauth2callback' # Generate URL for request to Google's OAuth 2.0 server. # Use kwargs to set optional request parameters. authorization_url, state = flow.authorization_url( # Recommended, enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Optional, enable incremental authorization. Recommended as a best practice. include_granted_scopes='true', # Optional, if your application knows which user is trying to authenticate, it can use this # parameter to provide a hint to the Google Authentication Server. login_hint='[email protected]', # Optional, set prompt to 'consent' will prompt the user for consent prompt='consent')
Ruby
उस client_secrets.json फ़ाइल का इस्तेमाल करें जिसे आपने अपने का इस्तेमाल करें. क्लाइंट ऑब्जेक्ट को कॉन्फ़िगर करने पर, आपके ऐप्लिकेशन के लिए ज़रूरी दायरे तय किए जाते हैं आपके ऐप्लिकेशन के पुष्टि करने वाले एंडपॉइंट के यूआरएल के साथ-साथ ऐक्सेस करता है, जो रिस्पॉन्स को हैंडल करेगा से डाउनलोड कर सकते हैं.
उदाहरण के लिए, यह कोड किसी उपयोगकर्ता की Google डिस्क:
require 'google/apis/drive_v3' require "googleauth" require 'googleauth/stores/redis_token_store' client_id = Google::Auth::ClientId.from_file('/path/to/client_secret.json') scope = 'https://www.googleapis.com/auth/drive.metadata.readonly' token_store = Google::Auth::Stores::RedisTokenStore.new(redis: Redis.new) authorizer = Google::Auth::WebUserAuthorizer.new(client_id, scope, token_store, '/oauth2callback')
आपका ऐप्लिकेशन, OAuth 2.0 से जुड़ी कार्रवाइयां करने के लिए क्लाइंट ऑब्जेक्ट का इस्तेमाल करता है, जैसे कि जनरेट करना की अनुमति देने के अनुरोध के यूआरएल और एचटीटीपी अनुरोधों पर ऐक्सेस टोकन लागू करना शामिल है.
Node.js
यह कोड स्निपेट एक google.auth.OAuth2
ऑब्जेक्ट बनाता है, जो
पैरामीटर को अनुमति देने के अनुरोध में शामिल कर सकते हैं.
वह ऑब्जेक्ट आपके ऐप्लिकेशन की पहचान करने के लिए, आपकी client_secret.json फ़ाइल की जानकारी का इस्तेमाल करता है. यहां की यात्रा पर हूं ऐक्सेस टोकन फिर से पाने के लिए, उपयोगकर्ता से अनुमतियां मांगें. सहमति वाले पेज का यूआरएल बनाने के लिए:
const {google} = require('googleapis'); const crypto = require('crypto'); const express = require('express'); const session = require('express-session'); /** * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI * from the client_secret.json file. To get these credentials for your application, visit * https://console.cloud.google.com/apis/credentials. */ const oauth2Client = new google.auth.OAuth2( YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_REDIRECT_URL ); // Access scopes for read-only Drive activity. const scopes = [ 'https://www.googleapis.com/auth/drive.metadata.readonly' ]; // Generate a secure random state value. const state = crypto.randomBytes(32).toString('hex'); // Store state in the session req.session.state = state; // Generate a url that asks permissions for the Drive activity scope const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true, // Include the state parameter to reduce the risk of CSRF attacks. state: state });
अहम जानकारी - refresh_token
सिर्फ़ पहले
अनुमति. ज़्यादा जानकारी
यहां पढ़ें.
एचटीटीपी/REST
Google का OAuth 2.0 एंडपॉइंट https://accounts.google.com/o/oauth2/v2/auth
पर है. यह
एंडपॉइंट को सिर्फ़ एचटीटीपीएस से ऐक्सेस किया जा सकता है. सामान्य एचटीटीपी कनेक्शन अस्वीकार कर दिए गए हैं.
Google ऑथराइज़ेशन सर्वर, वेब के लिए इन क्वेरी स्ट्रिंग पैरामीटर के साथ काम करता है सर्वर ऐप्लिकेशन:
पैरामीटर | |||||||
---|---|---|---|---|---|---|---|
client_id |
ज़रूरी है
आपके ऐप्लिकेशन का क्लाइंट आईडी. आपको यह वैल्यू यहां दिखेगी API Consoleअभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Credentials page. |
||||||
redirect_uri |
ज़रूरी है
यह तय करता है कि उपयोगकर्ता के पूरा करने के बाद एपीआई सर्वर, उपयोगकर्ता को कहां रीडायरेक्ट करता है
ऑथराइज़ेशन फ़्लो. वैल्यू, इनमें से किसी एक आधिकारिक रीडायरेक्ट यूआरआई से पूरी तरह मैच होनी चाहिए:
OAuth 2.0 क्लाइंट, जिसे आपने अपने क्लाइंट के
API Consoleअभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Credentials page. अगर यह मान किसी
दिए गए ध्यान दें कि |
||||||
response_type |
ज़रूरी है
इससे यह तय होता है कि Google OAuth 2.0 एंडपॉइंट, ऑथराइज़ेशन कोड दिखाता है या नहीं. वेब सर्वर ऐप्लिकेशन के लिए, पैरामीटर की वैल्यू को |
||||||
scope |
ज़रूरी है
ऐप्लिकेशन स्पेस-डीलिमिटेड दायरों की सूची, जो उन संसाधनों की पहचान करती है जिन्हें आपका ऐप्लिकेशन, का ऐक्सेस दिया गया है. ये वैल्यू उस स्क्रीन के बारे में बताती हैं जिसे Google, उपयोगकर्ता. स्कोप की वजह से आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों का ऐक्सेस मांग सकता है जिनकी उसे ज़रूरत है साथ ही, उपयोगकर्ता इस बात को भी कंट्रोल कर सकते हैं कि वे का इस्तेमाल करें. इसलिए, अनुरोध किए गए स्कोप की संख्या के बीच एक उलटा संबंध होता है उपयोगकर्ता की सहमति लेने की संभावना को भी बढ़ा देता है. हमारा सुझाव है कि आपका ऐप्लिकेशन, अनुमति के दायरों के ऐक्सेस का अनुरोध करे मदद मिलती है. कॉन्टेक्स्ट के हिसाब से उपयोगकर्ता के डेटा को ऐक्सेस करने का अनुरोध करके, ज़्यादा ऐक्सेस देकर पुष्टि करना, आप लोगों की मदद करने के लिए उन्हें यह समझने में मदद मिलती है कि आपके ऐप्लिकेशन को जिस ऐक्सेस की ज़रूरत है वह क्यों मांग रहा है. |
||||||
access_type |
सुझाया गया
यह बताता है कि उपयोगकर्ता के मौजूद न होने पर, आपका ऐप्लिकेशन ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं
ब्राउज़र पर. मान्य पैरामीटर वैल्यू अगर आपके ऐप्लिकेशन को ऐक्सेस टोकन रीफ़्रेश करने की ज़रूरत है, तो वैल्यू को |
||||||
state |
सुझाया गया
ऐसा कोई भी स्ट्रिंग मान तय करता है, जिसका इस्तेमाल आपका ऐप्लिकेशन आपके
की अनुमति का अनुरोध और अनुमति देने वाले सर्वर का जवाब.
सर्वर वही वैल्यू दिखाता है जो आपने इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है, जैसे कि उपयोगकर्ता को
आपके आवेदन में सही संसाधन, नॉन्स भेजना, और क्रॉस-साइट अनुरोध को कम करना
जालसाज़ी. आपके |
||||||
include_granted_scopes |
ज़रूरी नहीं
ऐप्लिकेशन को अतिरिक्त ऐक्सेस का अनुरोध करने के लिए वृद्धिशील प्राधिकरण का उपयोग करने में सक्षम बनाता है
शर्तों को पूरा करते हैं. अगर आप इस पैरामीटर का मान |
||||||
enable_granular_consent |
ज़रूरी नहीं
डिफ़ॉल्ट तौर पर, यह जब Google किसी ऐप्लिकेशन के लिए विस्तृत अनुमतियां चालू करता है, तो यह पैरामीटर करते हैं. |
||||||
login_hint |
ज़रूरी नहीं
अगर आपके ऐप्लिकेशन को पता है कि कौनसा उपयोगकर्ता प्रमाणित करने की कोशिश कर रहा है, तो वह इस पैरामीटर का इस्तेमाल कर सकता है का इस्तेमाल करें. सर्वर, इस प्रॉम्प्ट के लिए साइन-इन फ़ॉर्म में ईमेल फ़ील्ड को पहले से भरकर या सही मल्टी-लॉगिन सेशन चुनना होगा. पैरामीटर वैल्यू को किसी ईमेल पते या |
||||||
prompt |
ज़रूरी नहीं
उपयोगकर्ता को दिखाने के लिए प्रॉम्प्ट की स्पेस-डीलिमिटेड, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) सूची. अगर आपको इस पैरामीटर को सेट करने पर, उपयोगकर्ता को आपके प्रोजेक्ट में सिर्फ़ पहली बार प्रॉम्प्ट दिया जाएगा इसे ऐक्सेस करने का अनुरोध करता है. देखें ज़्यादा जानकारी के लिए, फिर से सहमति का अनुरोध किया जा रहा है. आपको ये वैल्यू दिख सकती हैं:
|
दूसरा चरण: Google के OAuth 2.0 सर्वर पर रीडायरेक्ट करना
पुष्टि करने की प्रक्रिया शुरू करने के लिए, उपयोगकर्ता को Google के OAuth 2.0 सर्वर पर रीडायरेक्ट करें और अनुमति देने की प्रक्रिया. आम तौर पर, ऐसा तब होता है, जब आपके ऐप्लिकेशन को पहली बार उपयोगकर्ता का डेटा है. इंक्रीमेंटल ऑथराइज़ेशन के मामले में, यह यह चरण तब भी होता है, जब आपके ऐप्लिकेशन को उन अतिरिक्त संसाधनों के ऐक्सेस की ज़रूरत होती है जो वह अभी तक ऐक्सेस करने की अनुमति नहीं है.
PHP
- Google के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए यूआरएल जनरेट करें:
$auth_url = $client->createAuthUrl();
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - उपयोगकर्ता को
$auth_url
पर रीडायरेक्ट करें:header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
Python
इस उदाहरण में, फ़्लास्क वेब का इस्तेमाल करके उपयोगकर्ता को अनुमति वाले यूआरएल पर रीडायरेक्ट करने का तरीका बताया गया है ऐप्लिकेशन का फ़्रेमवर्क:
return flask.redirect(authorization_url)
Ruby
- Google के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए यूआरएल जनरेट करें:
auth_uri = authorizer.get_authorization_url(login_hint: user_id, request: request)
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - उपयोगकर्ता को
auth_uri
पर रीडायरेक्ट करें.
Node.js
-
पहले चरण में जनरेट किए गए यूआरएल
authorizationUrl
का इस्तेमाल करें Google के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए,generateAuthUrl
तरीका. -
उपयोगकर्ता को
authorizationUrl
पर रीडायरेक्ट करें.res.redirect(authorizationUrl);
HTTP/REST
Sample redirect to Google's authorization server
An example URL is shown below, with line breaks and spaces for readability.
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly& access_type=offline& include_granted_scopes=true& response_type=code& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id
अनुरोध यूआरएल बनाने के बाद, उपयोगकर्ता को उस पर रीडायरेक्ट करें.
Google का OAuth 2.0 सर्वर उपयोगकर्ता की पुष्टि करता है. साथ ही, आपकी ऐप्लिकेशन का इस्तेमाल किया जा सकता है. जवाब आपके ऐप्लिकेशन पर वापस भेज दिया जाता है आपके बताए गए दूसरे वेबलिंक पर भेज सकते हैं.
तीसरा चरण: Google, उपयोगकर्ता से सहमति लेने का अनुरोध करता है
इस चरण में, उपयोगकर्ता यह तय करता है कि आपके ऐप्लिकेशन को अनुरोध किया गया ऐक्सेस देना है या नहीं. इस पर इस स्टेज में, Google एक सहमति विंडो दिखाता है. इसमें आपके ऐप्लिकेशन का नाम और Google API दिखता है ऐसी सेवाएं जिन्हें वह उपयोगकर्ता के ऑथराइज़ेशन क्रेडेंशियल के साथ ऐक्सेस करने की अनुमति का अनुरोध कर रहा है और दिए जाने वाले ऐक्सेस के दायरों की खास जानकारी. कॉन्टेंट बनाने इसके बाद उपयोगकर्ता, आपके ऐप्लिकेशन के अनुरोध किए गए एक या उससे ज़्यादा दायरों का ऐक्सेस देने की सहमति दे सकता है या अनुरोध अस्वीकार कर दो.
आपके आवेदन को इस चरण में कुछ भी करने की आवश्यकता नहीं है क्योंकि वह से प्रतिक्रिया की प्रतीक्षा करता है Google के OAuth 2.0 सर्वर से पता चलता है कि कोई ऐक्सेस दिया गया था या नहीं. उस जवाब के बारे में का पालन करने के लिए नीचे दिया गया तरीका अपनाएं.
गड़बड़ियां
Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट पर किए जाने वाले अनुरोधों पर, उपयोगकर्ता को दिखने वाली गड़बड़ी के मैसेज दिख सकते हैं करने के लिए कहा जाता है. सामान्य गड़बड़ियों के कोड और सुझाए गए समाधान नीचे दिए गए हैं.
admin_policy_enforced
Google खाता, नीचे बताई गई नीतियों की वजह से एक या एक से ज़्यादा दायरों को अनुमति नहीं दे सकता अपने Google Workspace एडमिन से संपर्क करना होगा. Google Workspace एडमिन का सहायता लेख पढ़ें यह कंट्रोल करना कि किस तीसरे पक्ष और इंटरनल ऐप्लिकेशन, Google Workspace का डेटा ऐक्सेस करते हैं ताकि इस बारे में ज़्यादा जानकारी मिल सके कि कोई एडमिन, सभी दायरों या संवेदनशील जानकारी के ऐक्सेस पर कैसे पाबंदी लगा सकता है और आपके OAuth क्लाइंट आईडी का ऐक्सेस साफ़ तौर पर मिलने तक, दायरों पर पाबंदी लगा दी जाएगी.
disallowed_useragent
ऑथराइज़ेशन एंडपॉइंट किसी एम्बेड किए गए उपयोगकर्ता-एजेंट के अंदर दिखाया जाता है, जिसे Google के पास अनुमति नहीं होती OAuth 2.0 की नीतियां.
Android
अनुमति देने के अनुरोध खोलते समय, Android डेवलपर को गड़बड़ी का यह मैसेज दिख सकता है
android.webkit.WebView
.
डेवलपर को इसके बजाय, इन Android लाइब्रेरी का इस्तेमाल करना चाहिए
Android के लिए Google साइन-इन या Notebook Foundation के लिए
Android के लिए AppAuth.
वेब डेवलपर को यह गड़बड़ी तब दिख सकती है, जब कोई Android ऐप्लिकेशन एम्बेड किया गया उपयोगकर्ता-एजेंट और उपयोगकर्ता, इससे Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट पर नेविगेट करता है आपकी साइट. डेवलपर को सामान्य लिंक को ऑपरेटिंग सिस्टम, जिसमें दोनों शामिल हैं Android ऐप्लिकेशन के लिंक हैंडलर या डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन का इस्तेमाल करें. कॉन्टेंट बनाने Android के कस्टम टैब लाइब्रेरी का भी इस्तेमाल किया जा सकता है.
iOS
अनुमति के अनुरोध खोलते समय, iOS और macOS डेवलपर को यह गड़बड़ी दिख सकती है
WKWebView
.
डेवलपर को इसके बजाय iOS लाइब्रेरी का इस्तेमाल करना चाहिए, जैसे कि
iOS के लिए Google साइन-इन या Notebook Foundation की सेवा
iOS के लिए AppAuth.
वेब डेवलपर को यह गड़बड़ी तब दिख सकती है, जब iOS या macOS ऐप्लिकेशन,
एक एम्बेड किया गया उपयोगकर्ता-एजेंट और उपयोगकर्ता, इससे Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट पर नेविगेट करता है
आपकी साइट. डेवलपर को सामान्य लिंक को
ऑपरेटिंग सिस्टम, जिसमें दोनों शामिल हैं
यूनिवर्सल लिंक
हैंडलर या डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन का इस्तेमाल करें. कॉन्टेंट बनाने
SFSafariViewController
लाइब्रेरी का भी इस्तेमाल किया जा सकता है.
org_internal
अनुरोध में दिया गया OAuth क्लाइंट आईडी, एक ऐसे प्रोजेक्ट का हिस्सा है जो Google खातों को तय Google Cloud का संगठन. इस कॉन्फ़िगरेशन विकल्प के बारे में ज़्यादा जानकारी के लिए, यहां देखें: उपयोगकर्ता का टाइप 'ऐसी स्क्रीन जहां OAuth के लिए सहमति दी जाती है' सेट अप करने का सहायता लेख पढ़ें.
invalid_client
OAuth क्लाइंट सीक्रेट गलत है. समीक्षा करें OAuth क्लाइंट कॉन्फ़िगरेशन के साथ-साथ इस अनुरोध के लिए इस्तेमाल किया गया क्लाइंट आईडी और सीक्रेट भी शामिल है.
invalid_grant
किसी ऐक्सेस टोकन को रीफ़्रेश करते समय या इसका इस्तेमाल करते समय इंक्रीमेंटल ऑथराइज़ेशन, तो हो सकता है कि टोकन की समयसीमा खत्म हो गई हो या टोकन मान्य हो अमान्य किया गया. उपयोगकर्ता की फिर से पुष्टि करें और नए टोकन पाने के लिए, उपयोगकर्ता की सहमति मांगें. अगर आपको जारी रखना है, तो इस गड़बड़ी को देखने के लिए, पक्का करें कि आपका ऐप्लिकेशन ठीक तरह से कॉन्फ़िगर किया गया है और आप इसमें सही टोकन और पैरामीटर का इस्तेमाल करें. ऐसा न करने पर, उपयोगकर्ता खाते में आपकी साइट को मिटा दिया गया है या उसे बंद कर दिया गया है.
redirect_uri_mismatch
अनुमति देने के अनुरोध में पास किया गया redirect_uri
, उस आधिकारिक खाते से मेल नहीं खाता जिसे अनुमति मिली है
OAuth क्लाइंट आईडी के लिए रीडायरेक्ट यूआरआई. यहां दिए गए आधिकारिक रीडायरेक्ट यूआरआई की समीक्षा करें:
Google API Console पर बताया गया हैCredentials page.
redirect_uri
पैरामीटर ऐसा OAuth आउट-ऑफ़-बैंड (OOB) फ़्लो देख सकता है जिसमें
अब काम नहीं करता. देखें
डेटा को दूसरी जगह भेजने से जुड़ी गाइड अपडेट करें.
इंटिग्रेशन.
invalid_request
आपके किए गए अनुरोध में कोई गड़बड़ी थी. ऐसा कई वजहों से हो सकता है:
- अनुरोध सही तरीके से फ़ॉर्मैट नहीं किया गया था
- अनुरोध में ज़रूरी पैरामीटर मौजूद नहीं थे
- अनुरोध, पुष्टि करने के लिए किसी ऐसे तरीके का इस्तेमाल करता है जो Google पर काम नहीं करता. अपने OAuth की पुष्टि करें इंटिग्रेशन के लिए, इंटिग्रेशन के सुझाए गए तरीके का इस्तेमाल किया जाता है
चौथा चरण: OAuth 2.0 सर्वर रिस्पॉन्स को मैनेज करना
OAuth 2.0 सर्वर बताए गए यूआरएल का इस्तेमाल करके आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध का जवाब देता है शामिल करते हैं.
अगर उपयोगकर्ता ऐक्सेस के अनुरोध को मंज़ूरी देता है, तो रिस्पॉन्स में एक ऑथराइज़ेशन कोड शामिल होता है. अगर आपने जब कोई उपयोगकर्ता अनुरोध स्वीकार नहीं करता है, तो जवाब में गड़बड़ी का एक मैसेज दिख रहा है. कॉन्टेंट बनाने वेब सर्वर को भेजा जाने वाला ऑथराइज़ेशन कोड या गड़बड़ी का मैसेज, क्वेरी पर दिखता है स्ट्रिंग, जैसा कि नीचे दिखाया गया है:
गड़बड़ी का जवाब:
https://oauth2.example.com/auth?error=access_denied
ऑथराइज़ेशन कोड से मिला रिस्पॉन्स:
https://oauth2.example.com/auth?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
OAuth 2.0 सर्वर के रिस्पॉन्स का सैंपल
नीचे दिए गए सैंपल यूआरएल पर क्लिक करके, इस फ़्लो की जांच की जा सकती है. यह यूआरएल अपनी Google डिस्क में मौजूद फ़ाइलों का मेटाडेटा देखने के लिए रीड-ओनली ऐक्सेस:
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly& access_type=offline& include_granted_scopes=true& response_type=code& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id
OAuth 2.0 फ़्लो पूरा करने के बाद, आपको
http://localhost/oauth2callback
, जिससे
404 NOT FOUND
गड़बड़ी जब तक आपकी लोकल मशीन उस पते पर फ़ाइल पेश नहीं करती. कॉन्टेंट बनाने
अगला चरण यूआरआई में दिखाई गई जानकारी के बारे में ज़्यादा जानकारी देता है, जब उपयोगकर्ता
आपके ऐप्लिकेशन पर वापस रीडायरेक्ट किया जाता है.
पांचवां चरण: रीफ़्रेश करने और ऐक्सेस करने के लिए Exchange का ऑथराइज़ेशन कोड टोकन
वेब सर्वर को ऑथराइज़ेशन कोड मिलने के बाद, वह ऑथराइज़ेशन कोड को एक्सचेंज कर सकता है पर जाएं.
PHP
ऐक्सेस टोकन से ऑथराइज़ेशन कोड को बदलने के लिए, authenticate
का इस्तेमाल करें
तरीका:
$client->authenticate($_GET['code']);
getAccessToken
तरीके की मदद से, ऐक्सेस टोकन फिर से पाया जा सकता है:
$access_token = $client->getAccessToken();
Python
अनुमति की पुष्टि करने के लिए, अपने कॉलबैक पेज पर google-auth
लाइब्रेरी का इस्तेमाल करें
सर्वर प्रतिक्रिया. इसके बाद, अनुमति को बदलने के लिए flow.fetch_token
तरीके का इस्तेमाल करें
ऐक्सेस टोकन के लिए उस रिस्पॉन्स में कोड:
state = flask.session['state'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly'], state=state) flow.redirect_uri = flask.url_for('oauth2callback', _external=True) authorization_response = flask.request.url flow.fetch_token(authorization_response=authorization_response) # Store the credentials in the session. # ACTION ITEM for developers: # Store user's access and refresh tokens in your data store if # incorporating this code into your real app. credentials = flow.credentials flask.session['credentials'] = { 'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes}
Ruby
अपने कॉलबैक पेज पर, अनुमति देने वाले सर्वर की पुष्टि करने के लिए, googleauth
लाइब्रेरी का इस्तेमाल करें
जवाब. सेव करने के लिए authorizer.handle_auth_callback_deferred
तरीके का इस्तेमाल करें
ऑथराइज़ेशन कोड को सबमिट करें और उस यूआरएल पर वापस रीडायरेक्ट करें जिससे मूल रूप से अनुमति पाने का अनुरोध किया गया था. यह
उपयोगकर्ता के सेशन में, नतीजों को कुछ समय के लिए छिपाकर कोड को शेयर करने की प्रोसेस को रोकता है.
target_url = Google::Auth::WebUserAuthorizer.handle_auth_callback_deferred(request) redirect target_url
Node.js
ऐक्सेस टोकन से ऑथराइज़ेशन कोड को बदलने के लिए, getToken
का इस्तेमाल करें
तरीका:
const url = require('url'); // Receive the callback from Google's OAuth 2.0 server. app.get('/oauth2callback', async (req, res) => { let q = url.parse(req.url, true).query; if (q.error) { // An error response e.g. error=access_denied console.log('Error:' + q.error); } else if (q.state !== req.session.state) { //check state value console.log('State mismatch. Possible CSRF attack'); res.end('State mismatch. Possible CSRF attack'); } else { // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); });
एचटीटीपी/REST
ऐक्सेस टोकन से ऑथराइज़ेशन कोड को बदलने के लिए,
https://oauth2.googleapis.com/token
एंडपॉइंट और ये पैरामीटर सेट करें:
फ़ील्ड | |
---|---|
client_id |
API Consoleसे मिला क्लाइंट आईडी Credentials page. |
client_secret |
API Consoleसे मिला क्लाइंट सीक्रेट Credentials page. |
code |
शुरुआती अनुरोध के बाद, ऑथराइज़ेशन कोड लौटाया गया. |
grant_type |
जैसा कि OAuth 2.0 में बताया गया है
स्पेसिफ़िकेशन के लिए, इस फ़ील्ड की वैल्यू authorization_code पर सेट होनी चाहिए. |
redirect_uri |
यहां आपके प्रोजेक्ट के लिए दिए गए रीडायरेक्ट यूआरआई में से एक है:
API Consoleअभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
दिए गए टास्क के लिए Credentials page
client_id . |
नीचे दिए गए स्निपेट में, अनुरोध का एक सैंपल दिखाया गया है:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& client_secret=your_client_secret& redirect_uri=https%3A//oauth2.example.com/code& grant_type=authorization_code
इस अनुरोध का जवाब देने के लिए, Google एक JSON ऑब्जेक्ट दिखाता है. इसमें कुछ समय के लिए उपलब्ध रहने वाला ऐक्सेस होता है
टोकन और रीफ़्रेश टोकन.
ध्यान दें कि रीफ़्रेश टोकन सिर्फ़ तब मिलता है, जब आपका ऐप्लिकेशन access_type
को सेट करता है
Google को किए गए शुरुआती अनुरोध में offline
पैरामीटर
अनुमति देने वाला सर्वर.
इस जवाब में ये फ़ील्ड शामिल होते हैं:
फ़ील्ड | |
---|---|
access_token |
वह टोकन जो आपका ऐप्लिकेशन, Google API अनुरोध को अनुमति देने के लिए भेजता है. |
expires_in |
ऐक्सेस टोकन की बची हुई अवधि कुछ सेकंड में. |
refresh_token |
ऐसा टोकन जिसका इस्तेमाल करके, नया ऐक्सेस टोकन पाया जा सकता है. रीफ़्रेश टोकन इस तारीख तक मान्य हैं:
जब उपयोगकर्ता ऐक्सेस रद्द कर देता है.
ध्यान दें, इस जवाब में यह फ़ील्ड सिर्फ़ तब दिखता है, जब आपने access_type को सेट किया हो
Google के ऑथराइज़ेशन सर्वर से किए गए शुरुआती अनुरोध में, offline पैरामीटर का इस्तेमाल करें.
|
scope |
access_token ने ऐक्सेस के जो दायरे दिए हैं उन्हें इनकी सूची के तौर पर दिखाया गया है
स्पेस-डीलिमिटेड, केस-सेंसिटिव स्ट्रिंग. |
token_type |
टोकन टाइप किया गया. इस समय, इस फ़ील्ड का मान हमेशा पर सेट होता है
Bearer . |
नीचे दिया गया स्निपेट एक सैंपल रिस्पॉन्स दिखाता है:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
गड़बड़ियां
किसी ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड की अदला-बदली करते समय, आपको ये समस्याएं आ सकती हैं के बजाय गड़बड़ी का मैसेज दिख रहा है. सामान्य गड़बड़ी कोड और सुझाए गए समाधान ये हैं नीचे दी गई सूची उपलब्ध है.
invalid_grant
दिया गया ऑथराइज़ेशन कोड अमान्य या गलत फ़ॉर्मैट में है. इसके ज़रिए नए कोड का अनुरोध करें: उपयोगकर्ता से सहमति मांगने के लिए, OAuth की प्रोसेस को फिर से शुरू करना फिर से.
Calling Google API
PHP
यह तरीका अपनाकर Google API को कॉल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करें:
- अगर आपको नए
Google\Client
ऑब्जेक्ट पर ऐक्सेस टोकन लागू करने की ज़रूरत हो — उदाहरण के लिए, अगर आपने किसी उपयोगकर्ता सेशन में ऐक्सेस टोकन सेव किया है — तोsetAccessToken
तरीका:$client->setAccessToken($access_token);
- जिस एपीआई को कॉल करना है उसके लिए सेवा ऑब्जेक्ट बनाएं. सेवा ऑब्जेक्ट इसके ज़रिए बनाया जाता है
एपीआई के लिए, कंस्ट्रक्टर को अनुमति वाला
Google\Client
ऑब्जेक्ट उपलब्ध कराकर कॉल करना चाहते हैं. उदाहरण के लिए, Drive API को कॉल करने के लिए:$drive = new Google\Service\Drive($client);
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - एपीआई सेवा से अनुरोध करने के लिए,
सर्विस ऑब्जेक्ट से मिला इंटरफ़ेस.
उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता के Google Drive में फ़ाइलों को शामिल करने के लिए:
$files = $drive->files->listFiles(array())->getItems();
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Python
ऐक्सेस टोकन पाने के बाद, आपका ऐप्लिकेशन उस टोकन का इस्तेमाल करके, एपीआई अनुरोधों को अनुमति दे सकता है: किसी उपयोगकर्ता खाते या सेवा खाते की तरफ़ से. उपयोगकर्ता के हिसाब से अनुमति देने वाले क्रेडेंशियल का इस्तेमाल करना को कॉल करने के लिए एक सर्विस ऑब्जेक्ट बनाया जा सकता है. इसके बाद, उस ऑब्जेक्ट का इस्तेमाल अनुमति वाले एपीआई अनुरोध.
- जिस एपीआई को कॉल करना है उसके लिए सेवा ऑब्जेक्ट बनाएं. सेवा ऑब्जेक्ट इसके ज़रिए बनाया जाता है
googleapiclient.discovery
लाइब्रेरी केbuild
तरीके को एपीआई का नाम और वर्शन, और उपयोगकर्ता के क्रेडेंशियल: उदाहरण के लिए, Drive API के वर्शन 3 को कॉल करने के लिए:from googleapiclient.discovery import build drive = build('drive', 'v2', credentials=credentials)
- एपीआई सेवा से अनुरोध करने के लिए,
सर्विस ऑब्जेक्ट से मिला इंटरफ़ेस.
उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता के Google Drive में फ़ाइलों को शामिल करने के लिए:
files = drive.files().list().execute()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
Ruby
ऐक्सेस टोकन मिलने के बाद, आपका ऐप्लिकेशन उस टोकन का इस्तेमाल करके एपीआई अनुरोध कर सकता है किसी उपयोगकर्ता खाते या सेवा खाते की तरफ़ से. उपयोगकर्ता के हिसाब से अनुमति देने वाले क्रेडेंशियल का इस्तेमाल करना को कॉल करने के लिए एक सर्विस ऑब्जेक्ट बनाया जा सकता है. इसके बाद, उस ऑब्जेक्ट का इस्तेमाल अनुमति वाले एपीआई अनुरोध.
- जिस एपीआई को कॉल करना है उसके लिए सेवा ऑब्जेक्ट बनाएं.
उदाहरण के लिए, Drive API के वर्शन 3 को कॉल करने के लिए:
drive = Google::Apis::DriveV3::DriveService.new
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - सेवा के लिए क्रेडेंशियल सेट करें:
drive.authorization = credentials
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - एपीआई सेवा से अनुरोध करने के लिए,
इंटरफ़ेस
सेवा ऑब्जेक्ट से मिलता है.
उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता के Google Drive में फ़ाइलों को शामिल करने के लिए:
files = drive.list_files
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
वैकल्पिक रूप से,
किसी तरीके के लिए options
पैरामीटर:
files = drive.list_files(options: { authorization: credentials })
Node.js
ऐक्सेस टोकन पाने और उसे OAuth2
ऑब्जेक्ट पर सेट करने के बाद, ऑब्जेक्ट का इस्तेमाल करें
का इस्तेमाल करें. आपका ऐप्लिकेशन उस टोकन का इस्तेमाल करके, उसकी तरफ़ से एपीआई अनुरोधों को अनुमति दे सकता है
कोई उपयोगकर्ता खाता या सेवा खाता. जिस एपीआई को कॉल करना है उसके लिए सेवा ऑब्जेक्ट बनाएं.
const { google } = require('googleapis'); // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { if (err1) return console.log('The API returned an error: ' + err1); const files = res1.data.files; if (files.length) { console.log('Files:'); files.map((file) => { console.log(`${file.name} (${file.id})`); }); } else { console.log('No files found.'); } });
एचटीटीपी/REST
जब आपके ऐप्लिकेशन को ऐक्सेस टोकन मिल जाता है, तब आपके पास इस टोकन का इस्तेमाल करके, Google को कॉल करने का विकल्प होता है
किसी दिए गए प्रतिनिधि की ओर से API
उपयोगकर्ता खाते के लिए. ऐसा करने के लिए, शामिल करें
एपीआई को किए गए अनुरोध में access_token
क्वेरी शामिल करके, ऐक्सेस टोकन
पैरामीटर या Authorization
एचटीटीपी हेडर Bearer
वैल्यू. जब मुमकिन हो,
एचटीटीपी हेडर को प्राथमिकता दी जाती है, क्योंकि सर्वर लॉग में क्वेरी स्ट्रिंग अक्सर दिखती हैं. ज़्यादातर
मामलों में आप Google API पर अपने कॉल सेट अप करने के लिए क्लाइंट लाइब्रेरी का उपयोग कर सकते हैं (उदाहरण के लिए,
Drive Files API को कॉल करना).
आप सभी Google API को आज़मा सकते हैं और यहां पर उनके दायरे देख सकते हैं OAuth 2.0 Playground.
एचटीटीपी जीईटी के उदाहरण
एक कॉल
drive.files
Authorization: Bearer
एचटीटीपी का इस्तेमाल करके एंडपॉइंट (Drive Files API) का इस्तेमाल करना
हेडर ऐसा दिख सकता है. ध्यान दें कि आपको अपना ऐक्सेस टोकन बताना होगा:
GET /drive/v2/files HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
यहां access_token
का इस्तेमाल करके, पुष्टि किए गए उपयोगकर्ता के लिए उसी एपीआई को कॉल किया गया है
क्वेरी स्ट्रिंग पैरामीटर:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
curl
के उदाहरण
curl
कमांड-लाइन ऐप्लिकेशन का इस्तेमाल करके, इन कमांड की जांच की जा सकती है. यह रही
उदाहरण के लिए, जो एचटीटीपी हेडर विकल्प का इस्तेमाल करता है (प्राथमिकता दी जाती है):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
इसके अलावा, क्वेरी स्ट्रिंग पैरामीटर विकल्प:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
पूरा उदाहरण
नीचे दिए गए उदाहरण में, उपयोगकर्ता के Google Drive में मौजूद फ़ाइलों की एक सूची को प्रिंट किया जाता है. इसके बाद, उपयोगकर्ता, Drive के मेटाडेटा को ऐक्सेस करने के लिए, ऐप्लिकेशन की पुष्टि करता है और सहमति देता है.
PHP
इस उदाहरण को चलाने के लिए:
- API Consoleमें, लोकल मशीन का यूआरएल
दिए गए हैं. उदाहरण के लिए,
http://localhost:8080
जोड़ें. - नई डायरेक्ट्री बनाएं और उसमें बदलाव करें. जैसे:
mkdir ~/php-oauth2-example cd ~/php-oauth2-example
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है - Google API क्लाइंट इंस्टॉल करें
कंपोज़र का इस्तेमाल करने वाले PHP के लिए:
composer require google/apiclient:^2.10
- कॉन्टेंट का इस्तेमाल करके
index.php
औरoauth2callback.php
फ़ाइलें बनाएं देखें. - उदाहरण को PHP सेवा के लिए कॉन्फ़िगर किए गए वेब सर्वर के साथ चलाएं. अगर PHP 5.6 या इसके बाद के वर्शन का इस्तेमाल किया जाता है, तो
PHP के बिल्ट-इन टेस्ट वेब सर्वर का इस्तेमाल कर सकता है:
php -S localhost:8080 ~/php-oauth2-example
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
index.php
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google\Client(); $client->setAuthConfig('client_secrets.json'); $client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY); if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { $client->setAccessToken($_SESSION['access_token']); $drive = new Google\Service\Drive($client); $files = $drive->files->listFiles(array())->getItems(); echo json_encode($files); } else { $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
oauth2callback.php
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google\Client(); $client->setAuthConfigFile('client_secrets.json'); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); $client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY); if (! isset($_GET['code'])) { // Generate and set state value $state = bin2hex(random_bytes(16)); $client->setState($state); $_SESSION['state'] = $state; $auth_url = $client->createAuthUrl(); header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); } else { // Check the state value if (!isset($_GET['state']) || $_GET['state'] !== $_SESSION['state']) { die('State mismatch. Possible CSRF attack.'); } $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Python
इस उदाहरण में, Flask फ़्रेमवर्क का इस्तेमाल किया गया है. यह
http://localhost:8080
पर वेब ऐप्लिकेशन चलाता है, जो आपको OAuth 2.0 की जांच करने देता है
फ़्लो. अगर आपको उस यूआरएल पर जाना है, तो आपको चार लिंक दिखेंगे:
- एपीआई अनुरोध की जांच करना: यह लिंक, उस पेज पर ले जाता है जो एपीआई के सैंपल को चलाने की कोशिश करता है अनुरोध. ज़रूरत पड़ने पर, पुष्टि करने की प्रोसेस शुरू हो जाती है. सफल होने पर, पेज एपीआई से मिला रिस्पॉन्स.
- सीधे पुष्टि करने के फ़्लो की जांच करना: यह लिंक उस पेज पर ले जाता है जो उपयोगकर्ता को भेजने की कोशिश करता है ऑथराइज़ेशन फ़्लो की मदद से. ऐप्लिकेशन इसके लिए अनुमति का अनुरोध करता है उपयोगकर्ता की ओर से अनुमति वाले एपीआई अनुरोध सबमिट करें.
- मौजूदा क्रेडेंशियल रद्द करना: यह लिंक उस पेज पर ले जाता है जहां उपयोगकर्ता की ओर से ऐप्लिकेशन को पहले से दी गई अनुमतियों को रद्द करता है.
- फ़्लैस्क सेशन क्रेडेंशियल मिटाएं: यह लिंक अनुमति देने वाले वे क्रेडेंशियल हटा देता है जो फ़्लास्क सेशन में सेव हो जाता है. इससे आप यह देख सकेंगे कि यदि कोई उपयोगकर्ता, जो पहले ही ने आपके ऐप्लिकेशन को अनुमति दी है और नए सेशन में एपीआई अनुरोध पर काम करने की कोशिश की है. इसकी मदद से, आपको एपीआई रिस्पॉन्स दिखेगा कि अगर उपयोगकर्ता ने आपकी दी हुई अनुमतियों को वापस ले लिया हो, तो आपके ऐप्लिकेशन को मिलने वाला रिस्पॉन्स डाउनलोड हो चुका है और आपके ऐप्लिकेशन ने अब भी निरस्त ऐक्सेस टोकन वाले अनुरोध को अनुमति देने की कोशिश की है.
# -*- coding: utf-8 -*- import os import flask import requests import google.oauth2.credentials import google_auth_oauthlib.flow import googleapiclient.discovery # This variable specifies the name of a file that contains the OAuth 2.0 # information for this application, including its client_id and client_secret. CLIENT_SECRETS_FILE = "client_secret.json" # This OAuth 2.0 access scope allows for full read/write access to the # authenticated user's account and requires requests to use an SSL connection. SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'] API_SERVICE_NAME = 'drive' API_VERSION = 'v2' app = flask.Flask(__name__) # Note: A secret key is included in the sample so that it works. # If you use this code in your application, replace this with a truly secret # key. See https://flask.palletsprojects.com/quickstart/#sessions. app.secret_key = 'REPLACE ME - this value is here as a placeholder.' @app.route('/') def index(): return print_index_table() @app.route('/test') def test_api_request(): if 'credentials' not in flask.session: return flask.redirect('authorize') # Load credentials from the session. credentials = google.oauth2.credentials.Credentials( **flask.session['credentials']) drive = googleapiclient.discovery.build( API_SERVICE_NAME, API_VERSION, credentials=credentials) files = drive.files().list().execute() # Save credentials back to session in case access token was refreshed. # ACTION ITEM: In a production app, you likely want to save these # credentials in a persistent database instead. flask.session['credentials'] = credentials_to_dict(credentials) return flask.jsonify(**files) @app.route('/authorize') def authorize(): # Create flow instance to manage the OAuth 2.0 Authorization Grant Flow steps. flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( CLIENT_SECRETS_FILE, scopes=SCOPES) # The URI created here must exactly match one of the authorized redirect URIs # for the OAuth 2.0 client, which you configured in the API Console. If this # value doesn't match an authorized URI, you will get a 'redirect_uri_mismatch' # error. flow.redirect_uri = flask.url_for('oauth2callback', _external=True) authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true') # Store the state so the callback can verify the auth server response. flask.session['state'] = state return flask.redirect(authorization_url) @app.route('/oauth2callback') def oauth2callback(): # Specify the state when creating the flow in the callback so that it can # verified in the authorization server response. state = flask.session['state'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( CLIENT_SECRETS_FILE, scopes=SCOPES, state=state) flow.redirect_uri = flask.url_for('oauth2callback', _external=True) # Use the authorization server's response to fetch the OAuth 2.0 tokens. authorization_response = flask.request.url flow.fetch_token(authorization_response=authorization_response) # Store credentials in the session. # ACTION ITEM: In a production app, you likely want to save these # credentials in a persistent database instead. credentials = flow.credentials flask.session['credentials'] = credentials_to_dict(credentials) return flask.redirect(flask.url_for('test_api_request')) @app.route('/revoke') def revoke(): if 'credentials' not in flask.session: return ('You need to <a href="/https/developers.google.com/authorize">authorize</a> before ' + 'testing the code to revoke credentials.') credentials = google.oauth2.credentials.Credentials( **flask.session['credentials']) revoke = requests.post('https://oauth2.googleapis.com/revoke', params={'token': credentials.token}, headers = {'content-type': 'application/x-www-form-urlencoded'}) status_code = getattr(revoke, 'status_code') if status_code == 200: return('Credentials successfully revoked.' + print_index_table()) else: return('An error occurred.' + print_index_table()) @app.route('/clear') def clear_credentials(): if 'credentials' in flask.session: del flask.session['credentials'] return ('Credentials have been cleared.<br><br>' + print_index_table()) def credentials_to_dict(credentials): return {'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes} def print_index_table(): return ('<table>' + '<tr><td><a href="/https/developers.google.com/test">Test an API request</a></td>' + '<td>Submit an API request and see a formatted JSON response. ' + ' Go through the authorization flow if there are no stored ' + ' credentials for the user.</td></tr>' + '<tr><td><a href="/https/developers.google.com/authorize">Test the auth flow directly</a></td>' + '<td>Go directly to the authorization flow. If there are stored ' + ' credentials, you still might not be prompted to reauthorize ' + ' the application.</td></tr>' + '<tr><td><a href="/https/developers.google.com/revoke">Revoke current credentials</a></td>' + '<td>Revoke the access token associated with the current user ' + ' session. After revoking credentials, if you go to the test ' + ' page, you should see an <code>invalid_grant</code> error.' + '</td></tr>' + '<tr><td><a href="/https/developers.google.com/clear">Clear Flask session credentials</a></td>' + '<td>Clear the access token currently stored in the user session. ' + ' After clearing the token, if you <a href="/https/developers.google.com/test">test the ' + ' API request</a> again, you should go back to the auth flow.' + '</td></tr></table>') if __name__ == '__main__': # When running locally, disable OAuthlib's HTTPs verification. # ACTION ITEM for developers: # When running in production *do not* leave this option enabled. os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' # Specify a hostname and port that are set as a valid redirect URI # for your API project in the Google API Console. app.run('localhost', 8080, debug=True)
Ruby
इस उदाहरण में, Sinatra फ़्रेमवर्क का इस्तेमाल किया गया है.
require 'google/apis/drive_v3' require 'sinatra' require 'googleauth' require 'googleauth/stores/redis_token_store' configure do enable :sessions set :client_id, Google::Auth::ClientId.from_file('/path/to/client_secret.json') set :scope, Google::Apis::DriveV3::AUTH_DRIVE_METADATA_READONLY set :token_store, Google::Auth::Stores::RedisTokenStore.new(redis: Redis.new) set :authorizer, Google::Auth::WebUserAuthorizer.new(settings.client_id, settings.scope, settings.token_store, '/oauth2callback') end get '/' do user_id = settings.client_id.id credentials = settings.authorizer.get_credentials(user_id, request) if credentials.nil? redirect settings.authorizer.get_authorization_url(login_hint: user_id, request: request) end drive = Google::Apis::DriveV3::DriveService.new files = drive.list_files(options: { authorization: credentials }) "<pre>#{JSON.pretty_generate(files.to_h)}</pre>" end get '/oauth2callback' do target_url = Google::Auth::WebUserAuthorizer.handle_auth_callback_deferred(request) redirect target_url end
Node.js
इस उदाहरण को चलाने के लिए:
-
API Consoleमें, इसका यूआरएल जोड़ें
स्थानीय मशीन में जोड़ दिया जाएगा. उदाहरण के लिए, जोड़ें
http://localhost
. - पक्का करें कि आपके पास रखरखाव एलटीएस, चालू एलटीएस या मौजूदा रिलीज़ Node.js इंस्टॉल हो गया है.
-
नई डायरेक्ट्री बनाएं और उसमें बदलाव करें. जैसे:
mkdir ~/nodejs-oauth2-example cd ~/nodejs-oauth2-example
-
Install the
Google API Client
Library
for Node.js using npm:
npm install googleapis
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है -
नीचे दिए गए कॉन्टेंट के साथ
main.js
फ़ाइलें बनाएं. -
उदाहरण चलाएं:
node .\main.js
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
main.js
const http = require('http'); const https = require('https'); const url = require('url'); const { google } = require('googleapis'); const crypto = require('crypto'); const express = require('express'); const session = require('express-session'); /** * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI. * To get these credentials for your application, visit * https://console.cloud.google.com/apis/credentials. */ const oauth2Client = new google.auth.OAuth2( YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_REDIRECT_URL ); // Access scopes for read-only Drive activity. const scopes = [ 'https://www.googleapis.com/auth/drive.metadata.readonly' ]; /* Global variable that stores user credential in this code example. * ACTION ITEM for developers: * Store user's refresh token in your data store if * incorporating this code into your real app. * For more information on handling refresh tokens, * see https://github.com/googleapis/google-api-nodejs-client#handling-refresh-tokens */ let userCredential = null; async function main() { const app = express(); app.use(session({ secret: 'your_secure_secret_key', // Replace with a strong secret resave: false, saveUninitialized: false, })); // Example on redirecting user to Google's OAuth 2.0 server. app.get('/', async (req, res) => { // Generate a secure random state value. const state = crypto.randomBytes(32).toString('hex'); // Store state in the session req.session.state = state; // Generate a url that asks permissions for the Drive activity scope const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true, // Include the state parameter to reduce the risk of CSRF attacks. state: state }); res.redirect(authorizationUrl); }); // Receive the callback from Google's OAuth 2.0 server. app.get('/oauth2callback', async (req, res) => { // Handle the OAuth 2.0 server response let q = url.parse(req.url, true).query; if (q.error) { // An error response e.g. error=access_denied console.log('Error:' + q.error); } else if (q.state !== req.session.state) { //check state value console.log('State mismatch. Possible CSRF attack'); res.end('State mismatch. Possible CSRF attack'); } else { // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); /** Save credential to the global variable in case access token was refreshed. * ACTION ITEM: In a production app, you likely want to save the refresh token * in a secure persistent database instead. */ userCredential = tokens; // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { if (err1) return console.log('The API returned an error: ' + err1); const files = res1.data.files; if (files.length) { console.log('Files:'); files.map((file) => { console.log(`${file.name} (${file.id})`); }); } else { console.log('No files found.'); } }); } }); // Example on revoking a token app.get('/revoke', async (req, res) => { // Build the string for the POST request let postData = "token=" + userCredential.access_token; // Options for POST request to Google's OAuth 2.0 server to revoke a token let postOptions = { host: 'oauth2.googleapis.com', port: '443', path: '/revoke', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; // Set up the request const postReq = https.request(postOptions, function (res) { res.setEncoding('utf8'); res.on('data', d => { console.log('Response: ' + d); }); }); postReq.on('error', error => { console.log(error) }); // Post the request with data postReq.write(postData); postReq.end(); }); const server = http.createServer(app); server.listen(80); } main().catch(console.error);
एचटीटीपी/REST
Python के इस उदाहरण में Flask फ़्रेमवर्क का इस्तेमाल किया गया है OAuth दिखाने के लिए, अनुरोध लाइब्रेरी का भी इस्तेमाल किया जा सकता है 2.0 वेब फ़्लो. हमारा सुझाव है कि इस फ़्लो के लिए, Python के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल करें. ( उदाहरण के लिए, Python टैब में क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है.)
import json import flask import requests app = flask.Flask(__name__) CLIENT_ID = '123456789.apps.googleusercontent.com' CLIENT_SECRET = 'abc123' # Read from a file or environmental variable in a real app SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly' REDIRECT_URI = 'http://example.com/oauth2callback' @app.route('/') def index(): if 'credentials' not in flask.session: return flask.redirect(flask.url_for('oauth2callback')) credentials = json.loads(flask.session['credentials']) if credentials['expires_in'] <= 0: return flask.redirect(flask.url_for('oauth2callback')) else: headers = {'Authorization': 'Bearer {}'.format(credentials['access_token'])} req_uri = 'https://www.googleapis.com/drive/v2/files' r = requests.get(req_uri, headers=headers) return r.text @app.route('/oauth2callback') def oauth2callback(): if 'code' not in flask.request.args: state = str(uuid.uuid4()) flask.session['state'] = state auth_uri = ('https://accounts.google.com/o/oauth2/v2/auth?response_type=code' '&client_id={}&redirect_uri={}&scope={}&state={}').format(CLIENT_ID, REDIRECT_URI, SCOPE, state) return flask.redirect(auth_uri) else: if 'state' not in flask.request.args or flask.request.args['state'] != flask.session['state']: return 'State mismatch. Possible CSRF attack.', 400 auth_code = flask.request.args.get('code') data = {'code': auth_code, 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'redirect_uri': REDIRECT_URI, 'grant_type': 'authorization_code'} r = requests.post('https://oauth2.googleapis.com/token', data=data) flask.session['credentials'] = r.text return flask.redirect(flask.url_for('index')) if __name__ == '__main__': import uuid app.secret_key = str(uuid.uuid4()) app.debug = False app.run()
रीडायरेक्ट यूआरआई की पुष्टि के नियम
डेवलपर की मदद करने के लिए, Google, यूआरआई को रीडायरेक्ट करने के लिए पुष्टि करने के ये नियम लागू करता है उनके ऐप्लिकेशन सुरक्षित रहते हैं. आपके रीडायरेक्ट यूआरआई को इन नियमों का पालन करना ज़रूरी है. यहां जाएं: आरएफ़सी 3986 सेक्शन 3 डोमेन, होस्ट, पाथ, क्वेरी, स्कीम, और उपयोगकर्ता की जानकारी की परिभाषा नीचे दी गई है.
सत्यापन नियम | |
---|---|
स्कीम |
रीडायरेक्ट यूआरआई को सामान्य एचटीटीपी के बजाय, एचटीटीपीएस स्कीम का इस्तेमाल करना चाहिए. Localhost यूआरआई (इसमें ये शामिल हैं localhost के आईपी पते के यूआरआई) पर यह नियम लागू नहीं होता. |
होस्ट |
होस्ट, अमान्य आईपी पते नहीं हो सकते. लोकल होस्ट के आईपी पतों पर यह नियम लागू नहीं होता. |
डोमेन |
“googleusercontent.com” नहीं हो सकते.goo.gl ) तब तक नहीं हो सकते जब तक कि
ऐप्लिकेशन डोमेन का मालिक है. इसके अलावा, अगर डोमेन नेम को छोटा करने वाले डोमेन का मालिक है, तो
उस डोमेन पर रीडायरेक्ट करते हैं, तो उस रीडायरेक्ट यूआरआई में
“/google-callback/” के पाथ में है या इस पर खत्म होता है
“/google-callback” . |
उपयोगकर्ता की जानकारी |
रीडायरेक्ट यूआरआई में userinfo सबकॉम्पोनेंट शामिल नहीं हो सकता. |
पाथ |
रीडायरेक्ट यूआरआई में पाथ ट्रेवर्सल नहीं होना चाहिए (इसे डायरेक्ट्री बैकट्रैकिंग भी कहा जाता है),
जिसे |
क्वेरी |
रीडायरेक्ट यूआरआई में शामिल नहीं किया जा सकता ओपन रीडायरेक्ट. |
फ़्रैगमेंट |
रीडायरेक्ट यूआरआई में फ़्रैगमेंट कॉम्पोनेंट शामिल नहीं हो सकता. |
वर्ण |
रीडायरेक्ट यूआरआई में कुछ वर्ण नहीं हो सकते, जिनमें ये शामिल हैं:
|
इंक्रीमेंटल अनुमति
OAuth 2.0 प्रोटोकॉल में, आपका ऐप्लिकेशन रिसॉर्स ऐक्सेस करने के लिए अनुमति मांगता है सीमाओं से पहचाना जा सकता है. अनुमति पाने का अनुरोध करना, उपयोगकर्ता अनुभव के लिए सबसे सही तरीका माना जाता है आपके लिए संसाधन उपलब्ध हों. इस तरीके को चालू करने के लिए, Google के ऑथराइज़ेशन सर्वर को इंक्रीमेंटल ऑथराइज़ेशन का समर्थन करता है. इस सुविधा से, ज़रूरत के हिसाब से दायरों का अनुरोध किया जा सकता है और अगर उपयोगकर्ता नए दायरे के लिए अनुमति देता है, तो यह किसी ऐसे टोकन के साथ शेयर किया जाना चाहिए जिसमें वे सभी स्कोप शामिल हों जो उपयोगकर्ता ने प्रोजेक्ट को दिए हैं.
उदाहरण के लिए, एक ऐसा ऐप्लिकेशन जो लोगों को म्यूज़िक ट्रैक का सैंपल देने और मिक्स बनाने की सुविधा देता है, उसके लिए बहुत कम साइन-इन के समय पर उपलब्ध संसाधनों का उपयोग कर सकते हैं, जो शायद प्रवेश करने वाले व्यक्ति के नाम से ज़्यादा कुछ नहीं होगा. हालांकि, सेव किए गए मिक्स को सेव करने के लिए, उसे अपने Google Drive का ऐक्सेस देना होगा. ज़्यादातर लोगों को यह मिल जाएगा यह स्वाभाविक है, अगर उनसे Google Drive को ऐक्सेस करने के लिए कहा गया हो, जबकि ऐप्लिकेशन असल में उस समय ऐसा करता हो ज़रूरत थी.
इस स्थिति में, साइन-इन करते समय ऐप्लिकेशन openid
और
बुनियादी साइन-इन करने के लिए, profile
दायरे करता है. इसके बाद, बाद में
पहले अनुरोध के समय https://www.googleapis.com/auth/drive.file
स्कोप
मिक्स.
इंक्रीमेंटल ऑथराइज़ेशन लागू करने के लिए, आपको ऐक्सेस के अनुरोध से जुड़ा सामान्य फ़्लो पूरा करना होगा टोकन के अंदर मौजूद स्कोप को ब्लॉक करना होगा, लेकिन पक्का करें कि अनुमति देने के अनुरोध में पहले दिए गए दायरे शामिल हों. यह अप्रोच का इस्तेमाल करने पर, आपके ऐप्लिकेशन को एक से ज़्यादा ऐक्सेस टोकन मैनेज करने की ज़रूरत नहीं पड़ती.
इंक्रीमेंटल अनुमति से मिलने वाले ऐक्सेस टोकन पर, ये नियम लागू होते हैं:
- इस टोकन का इस्तेमाल, नया, संयुक्त प्राधिकरण.
- जब किसी ऐक्सेस टोकन को हासिल करने के लिए, अनुमति वाले रिफ़्रेश टोकन का इस्तेमाल किया जाता है, तो
ऐक्सेस टोकन, अनुमति देने वाले संयुक्त शुल्क को दिखाता है और इसका इस्तेमाल
जवाब में
scope
वैल्यू शामिल की गईं. - एक साथ अनुमति देने में, वे सभी दायरे शामिल होते हैं जिन्हें उपयोगकर्ता ने एपीआई प्रोजेक्ट को दिया है. यहां तक कि अगर अनुदान के लिए अलग-अलग क्लाइंट से अनुरोध किया गया था. उदाहरण के लिए, अगर किसी उपयोगकर्ता ने एक ऐप्लिकेशन के डेस्कटॉप क्लाइंट का इस्तेमाल करके एक दायरे की अनुमति दी गई और फिर उसी दिए गए हैं, तो संयुक्त प्राधिकरण में दोनों दायरे शामिल होंगे.
- अगर किसी ऐसे टोकन को रद्द किया जाता है जो अनुमति देने वाले मिले-जुले तरीकों का इस्तेमाल करता है, तो उन सभी को ऐक्सेस करें संबंधित उपयोगकर्ता की ओर से अनुमति के दायरे एक साथ निरस्त किए जाते हैं.
पहला चरण: अनुमति सेट करना पैरामीटर और चरण 2 में नमूना HTTP/REST रीडायरेक्ट यूआरएल: Google के OAuth 2.0 सर्वर पर रीडायरेक्ट करें. ये सभी डोमेन, अनुमति देने की सुविधा का इस्तेमाल करते हैं. कोड सैंपल नीचे वह कोड भी दिखाया गया है जिसे आपको इंक्रीमेंटल (बढ़ने वाले) की अनुमति का इस्तेमाल करने के लिए जोड़ना होगा.
PHP
$client->setIncludeGrantedScopes(true);
Python
Python में, include_granted_scopes
कीवर्ड आर्ग्युमेंट को true
पर सेट करें
पक्का करें कि अनुमति देने के अनुरोध में, पहले दिए गए दायरे शामिल हों. बहुत संभव है कि
include_granted_scopes
, सिर्फ़ कीवर्ड तर्क नहीं होगा, जिसे आपने सेट किया है, जैसे कि
यहां दिए गए उदाहरण में बताया गया है.
authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
Ruby
auth_client.update!( :additional_parameters => {"include_granted_scopes" => "true"} )
Node.js
const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
एचटीटीपी/REST
GET https://accounts.google.com/o/oauth2/v2/auth? client_id=your_client_id& response_type=code& state=state_parameter_passthrough_value& scope=https%3A//www.googleapis.com/auth/drive.file& redirect_uri=https%3A//oauth2.example.com/code& prompt=consent& include_granted_scopes=true
ऐक्सेस टोकन को रीफ़्रेश करना (ऑफ़लाइन ऐक्सेस)
ऐक्सेस टोकन, समय-समय पर खत्म हो जाते हैं और मिलते-जुलते एपीआई अनुरोध के लिए, अमान्य क्रेडेंशियल बन जाते हैं. आपने लोगों तक पहुंचाया मुफ़्त में किसी ऐक्सेस टोकन को रीफ़्रेश कर सकता है. इसके लिए, उसे अनुमति देने के लिए नहीं कहा जाता. ऐसा तब भी किया जा सकता है, जब उपयोगकर्ता मौजूद नहीं है) अगर आपने टोकन से जुड़े स्कोप के लिए ऑफ़लाइन ऐक्सेस का अनुरोध किया है.
- किसी Google API क्लाइंट लाइब्रेरी का इस्तेमाल करने पर, क्लाइंट ऑब्जेक्ट रीफ़्रेश हो जाता है के लिए तब तक कॉन्फ़िगर किया जा सकता है, जब तक आप उस ऑब्जेक्ट को ऑफ़लाइन ऐक्सेस के लिए कॉन्फ़िगर करते हैं.
- अगर क्लाइंट लाइब्रेरी का इस्तेमाल नहीं किया जा रहा है, तो आपको
access_type
एचटीटीपी सेट करना होगा उपयोगकर्ता को यहां रीडायरेक्ट करते समयoffline
पर क्वेरी पैरामीटर Google का OAuth 2.0 सर्वर. ऐसी स्थिति में, Google का प्राधिकरण सर्वर ऑथराइज़ेशन का एक्सचेंज करने पर टोकन रीफ़्रेश करें कोड सबमिट करें. इसके बाद, अगर ऐक्सेस टोकन की समयसीमा खत्म हो जाती है या किसी दूसरे समय पर सेट हो जाती है, तो नया ऐक्सेस टोकन पाने के लिए रीफ़्रेश टोकन का इस्तेमाल कर सकते हैं.
अगर किसी ऐप्लिकेशन को Google का इस्तेमाल करने की ज़रूरत है, तो उसे ऑफ़लाइन ऐक्सेस के लिए अनुरोध करना होगा
उपयोगकर्ता के मौजूद न होने पर एपीआई. उदाहरण के लिए, बैकअप सेवाएं देने वाला ऐप्लिकेशन या
पहले से तय समय पर कार्रवाइयां करता है. इसके लिए, अपने ऐक्सेस टोकन को रीफ़्रेश करना ज़रूरी है. ऐसा तब होता है, जब
उपयोगकर्ता मौजूद नहीं है. ऐक्सेस का डिफ़ॉल्ट तरीका online
है.
सर्वर साइड वेब ऐप्लिकेशन, इंस्टॉल किए गए ऐप्लिकेशन, और डिवाइस सभी को रीफ़्रेश टोकन मिलते हैं को ट्रैक करने की सुविधा मिलती है. रीफ़्रेश टोकन आम तौर पर क्लाइंट-साइड में इस्तेमाल नहीं किए जाते (JavaScript) वेब ऐप्लिकेशन.
PHP
अगर आपके ऐप्लिकेशन को किसी Google API को ऑफ़लाइन ऐक्सेस करने की ज़रूरत है, तो एपीआई क्लाइंट का ऐक्सेस टाइप इस पर सेट करें
offline
:
$client->setAccessType("offline");
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों का ऑफ़लाइन ऐक्सेस देता है, तब आपके पास एपीआई का इस्तेमाल जारी रखने का विकल्प होता है जब उपयोगकर्ता ऑफ़लाइन हो, तो उपयोगकर्ता की ओर से Google API ऐक्सेस करने के लिए क्लाइंट. क्लाइंट ऑब्जेक्ट ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
Python
Python में, यह पक्का करने के लिए access_type
कीवर्ड आर्ग्युमेंट को offline
पर सेट करें
ऐक्सेस टोकन को रीफ़्रेश किया जा सकेगा. इसके लिए, आपको उपयोगकर्ता से दोबारा अनुरोध करने की ज़रूरत नहीं पड़ेगी
अनुमति. बहुत संभव है कि access_type
केवल कीवर्ड नहीं होगा
आपके पास करना है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.
authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों का ऑफ़लाइन ऐक्सेस देता है, तब आपके पास एपीआई का इस्तेमाल जारी रखने का विकल्प होता है जब उपयोगकर्ता ऑफ़लाइन हो, तो उपयोगकर्ता की ओर से Google API ऐक्सेस करने के लिए क्लाइंट. क्लाइंट ऑब्जेक्ट ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
Ruby
अगर आपके ऐप्लिकेशन को किसी Google API को ऑफ़लाइन ऐक्सेस करने की ज़रूरत है, तो एपीआई क्लाइंट का ऐक्सेस टाइप इस पर सेट करें
offline
:
auth_client.update!( :additional_parameters => {"access_type" => "offline"} )
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों का ऑफ़लाइन ऐक्सेस देता है, तब आपके पास एपीआई का इस्तेमाल जारी रखने का विकल्प होता है जब उपयोगकर्ता ऑफ़लाइन हो, तो उपयोगकर्ता की ओर से Google API ऐक्सेस करने के लिए क्लाइंट. क्लाइंट ऑब्जेक्ट ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
Node.js
अगर आपके ऐप्लिकेशन को किसी Google API को ऑफ़लाइन ऐक्सेस करने की ज़रूरत है, तो एपीआई क्लाइंट का ऐक्सेस टाइप इस पर सेट करें
offline
:
const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों का ऑफ़लाइन ऐक्सेस देता है, तब आपके पास एपीआई का इस्तेमाल जारी रखने का विकल्प होता है जब उपयोगकर्ता ऑफ़लाइन हो, तो उपयोगकर्ता की ओर से Google API ऐक्सेस करने के लिए क्लाइंट. क्लाइंट ऑब्जेक्ट ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
ऐक्सेस टोकन की समयसीमा खत्म हो जाती है. नया ऐक्सेस पाने के लिए, यह लाइब्रेरी अपने-आप रीफ़्रेश टोकन का इस्तेमाल करेगी टोकन शामिल नहीं किया जाता. यह पक्का करने का आसान तरीका कि आपके पास हमेशा सबसे नए टोकन सेव किए जाते हैं टोकन इवेंट का इस्तेमाल करना है:
oauth2Client.on('tokens', (tokens) => { if (tokens.refresh_token) { // store the refresh_token in your secure persistent database console.log(tokens.refresh_token); } console.log(tokens.access_token); });
यह टोकन इवेंट सिर्फ़ पहले अनुमति देने पर होता है और आपको इसे सेट करना होगा
generateAuthUrl
पर कॉल करने पर, access_type
से offline
रीफ़्रेश टोकन पाने का तरीका. अगर आपने अपने ऐप्लिकेशन को पहले से ही ज़रूरी अनुमतियां दे दी हैं
रीफ़्रेश टोकन पाने के लिए सही कंस्ट्रेंट सेट किए बिना, आपको
नया रीफ़्रेश टोकन पाने के लिए ऐप्लिकेशन को फिर से अनुमति दें.
refresh_token
को बाद में सेट करने के लिए, setCredentials
तरीके का इस्तेमाल किया जा सकता है:
oauth2Client.setCredentials({ refresh_token: `STORED_REFRESH_TOKEN` });
क्लाइंट को रीफ़्रेश टोकन मिलने के बाद, ऐक्सेस टोकन अपने-आप हासिल और रीफ़्रेश हो जाएंगे एपीआई के अगले कॉल में.
एचटीटीपी/REST
ऐक्सेस टोकन को रीफ़्रेश करने के लिए, आपका ऐप्लिकेशन एचटीटीपीएस POST
भेजता है
Google के ऑथराइज़ेशन सर्वर (https://oauth2.googleapis.com/token
) से अनुरोध करेगा कि
इसमें ये पैरामीटर शामिल होते हैं:
फ़ील्ड | |
---|---|
client_id |
API Consoleसे मिला क्लाइंट आईडी. |
client_secret |
API Consoleसे मिला क्लाइंट सीक्रेट. |
grant_type |
जैसे
तय की गई
OAuth 2.0 का स्पेसिफ़िकेशन,
इस फ़ील्ड का मान refresh_token पर सेट होना चाहिए. |
refresh_token |
ऑथराइज़ेशन कोड के एक्सचेंज से मिला रीफ़्रेश टोकन. |
नीचे दिए गए स्निपेट में, अनुरोध का एक सैंपल दिखाया गया है:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& client_secret=your_client_secret& refresh_token=refresh_token& grant_type=refresh_token
जब तक उपयोगकर्ता, ऐप्लिकेशन को दिया गया ऐक्सेस रद्द नहीं करता, तब तक टोकन सर्वर JSON ऑब्जेक्ट दिखाता है, जिसमें नया ऐक्सेस टोकन होता है. नीचे दिया गया स्निपेट एक सैंपल दिखाता है जवाब:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "token_type": "Bearer" }
ध्यान दें कि जारी किए जाने वाले रीफ़्रेश टोकन की संख्या सीमित है; एक सीमा प्रति और सभी क्लाइंट में हर उपयोगकर्ता के हिसाब से एक-दूसरे का इस्तेमाल करना होगा. आपको रीफ़्रेश टोकन सेव करने चाहिए और उनका इस्तेमाल तब तक करते रहें, जब तक वे मान्य हों. अगर आपका आवेदन बहुत ज़्यादा रीफ़्रेश टोकन का अनुरोध करता है, तो वह इन सीमाओं का सामना कर सकता है. इस स्थिति में पुराने रीफ़्रेश टोकन काम करना बंद कर देगी.
टोकन निरस्त करना
कुछ मामलों में, हो सकता है कि उपयोगकर्ता किसी ऐप्लिकेशन को दिया गया ऐक्सेस वापस लेना चाहें. उपयोगकर्ता, ऐक्सेस रद्द कर सकता है पर जाकर खाता सेटिंग. ज़्यादा जानकारी के लिए, हटाएं तीसरे पक्ष की साइटों का साइट या ऐप्लिकेशन ऐक्सेस सेक्शन और ऐसे ऐप्लिकेशन जिनके पास आपके खाते का ऐक्सेस है सहायता दस्तावेज़ देखें.
किसी ऐप्लिकेशन को दी गई ऐक्सेस को प्रोग्राम के हिसाब से रद्द करना भी संभव है. प्रोग्राम के हिसाब से प्रोसेस को रद्द करना तब ज़रूरी होता है, जब कोई उपयोगकर्ता सदस्यता छोड़ता है, किसी ऐप्लिकेशन के लिए ज़रूरी एपीआई संसाधनों में बहुत ज़्यादा बदलाव हुए हैं. दूसरे शब्दों में, हटाने की प्रोसेस के हिस्से में, एपीआई अनुरोध शामिल हो सकता है. इससे यह पक्का किया जा सकेगा कि पहले से दी गई अनुमतियां ऐप्लिकेशन को दी गई अनुमति हटा दी जाती है.
PHP
प्रोग्राम के हिसाब से टोकन को रद्द करने के लिए, revokeToken()
को कॉल करें:
$client->revokeToken();
Python
किसी टोकन को प्रोग्राम के हिसाब से रद्द करने के लिए,
https://oauth2.googleapis.com/revoke
, जो पैरामीटर के रूप में टोकन शामिल करता है और
Content-Type
हेडर:
requests.post('https://oauth2.googleapis.com/revoke', params={'token': credentials.token}, headers = {'content-type': 'application/x-www-form-urlencoded'})
Ruby
किसी टोकन को प्रोग्राम के हिसाब से रद्द करने के लिए, oauth2.revoke
को एचटीटीपी अनुरोध करें
एंडपॉइंट:
uri = URI('https://oauth2.googleapis.com/revoke') response = Net::HTTP.post_form(uri, 'token' => auth_client.access_token)
टोकन, ऐक्सेस टोकन या रीफ़्रेश टोकन हो सकता है. अगर टोकन एक ऐक्सेस टोकन है और उसमें तो रीफ़्रेश टोकन को भी निरस्त कर दिया जाएगा.
अगर सहमति रद्द हो गई है, तो रिस्पॉन्स का स्टेटस कोड यह होता है
200
. गड़बड़ी की शर्तों के लिए, स्टेटस कोड 400
के साथ
गड़बड़ी कोड.
Node.js
किसी टोकन को प्रोग्राम के हिसाब से रद्द करने के लिए, /revoke
को एचटीटीपीएस पोस्ट अनुरोध भेजें
एंडपॉइंट:
const https = require('https'); // Build the string for the POST request let postData = "token=" + userCredential.access_token; // Options for POST request to Google's OAuth 2.0 server to revoke a token let postOptions = { host: 'oauth2.googleapis.com', port: '443', path: '/revoke', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; // Set up the request const postReq = https.request(postOptions, function (res) { res.setEncoding('utf8'); res.on('data', d => { console.log('Response: ' + d); }); }); postReq.on('error', error => { console.log(error) }); // Post the request with data postReq.write(postData); postReq.end();
टोकन पैरामीटर, ऐक्सेस टोकन या रीफ़्रेश टोकन हो सकता है. अगर टोकन एक ऐक्सेस टोकन है और उसमें तो रीफ़्रेश टोकन को भी निरस्त कर दिया जाएगा.
अगर सहमति रद्द हो गई है, तो रिस्पॉन्स का स्टेटस कोड यह होता है
200
. गड़बड़ी की शर्तों के लिए, स्टेटस कोड 400
के साथ
गड़बड़ी कोड.
एचटीटीपी/REST
किसी टोकन को प्रोग्राम के हिसाब से रद्द करने के लिए, आपका ऐप्लिकेशन इसके लिए अनुरोध करता है
https://oauth2.googleapis.com/revoke
और इसमें पैरामीटर के तौर पर टोकन शामिल होता है:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/revoke?token={token}
टोकन, ऐक्सेस टोकन या रीफ़्रेश टोकन हो सकता है. अगर टोकन एक ऐक्सेस टोकन है और उसमें प्रासंगिक रीफ़्रेश टोकन के रूप में, तो रीफ़्रेश टोकन को भी निरस्त कर दिया जाएगा.
अगर सहमति रद्द हो गई है, तो रिस्पॉन्स का एचटीटीपी स्टेटस कोड यह होगा
200
. गड़बड़ी की स्थितियों के लिए, एक एचटीटीपी स्टेटस कोड 400
दिखाया जाता है
डालें.
'सभी खातों की सुरक्षा' सुविधा को लागू करना
अपने उपयोगकर्ताओं की सुरक्षा के लिए, Google Ads खातों में 'क्रॉस-खाता' लागू की जा रही है Google की 'सभी खातों की सुरक्षा' सेवा का इस्तेमाल करके अपने डेटा की सुरक्षा करना. यह सेवा आपको सुरक्षा से जुड़ी गतिविधियों की सूचना पाने की सदस्यता लेते हैं. इन सूचनाओं में, आपके ऐप्लिकेशन के बारे में जानकारी दी जाती है उपयोगकर्ता खाते में बड़े बदलाव हुए हैं. इसके बाद, कार्रवाई करने के लिए जानकारी का इस्तेमाल किया जा सकता है. इवेंट पर जवाब देने का फ़ैसला किस तरह लिया जाता है.
Google की 'सभी खातों की सुरक्षा' सेवा से आपके ऐप्लिकेशन को भेजे जाने वाले इवेंट टाइप के कुछ उदाहरण:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
ज़्यादा जानकारी के लिए, 'सभी खातों की सुरक्षा' पेज की मदद से उपयोगकर्ता खातों को सुरक्षित रखना ताकि 'सभी खातों की सुरक्षा' सुविधा को लागू करने के बारे में ज़्यादा जानकारी और उपलब्ध इवेंट की पूरी सूची देख सकें.