Google अश्वेत समुदायों के लिए नस्लीय इक्विटी को आगे बढ़ाने के लिए प्रतिबद्ध है। देखो कैसे।
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

OAuth 2.0 प्रमाणीकरण और प्राधिकरण

नेस्ट एपीआई प्रमाणीकरण और प्राधिकरण के लिए OAuth 2.0 प्रोटोकॉल का उपयोग करता है।

इससे पहले कि आपका उत्पाद नेस्ट एपीआई का उपयोग करके निजी डेटा का उपयोग कर सकता है, उसे एक एक्सेस टोकन प्राप्त करना होगा जो उस एपीआई तक पहुंच प्रदान करता है। एक एकल एक्सेस टोकन एपीआई के कई वर्गों के लिए अलग-अलग डिग्री प्रदान कर सकता है।

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

OAuth 2.0 प्रवाह
OAuth 2.0 प्रवाह

नेस्ट क्लाइंट के साथ अपने वर्क्स को कॉन्फ़िगर करें

अपने ग्राहक के लिए OAuth 2.0 क्रेडेंशियल खोजने के लिए, ग्राहक पृष्ठ का अवलोकन टैब देखें।

URI या पिन-आधारित प्राधिकरण?

जब आप अपने क्लाइंट को कॉन्फ़िगर कर रहे हैं, तो आपको पिन-आधारित प्राधिकरण का उपयोग करने के लिए रीडायरेक्ट URI दर्ज करने या रिडायरेक्ट URI फ़ील्ड खाली छोड़ने के लिए कहा जाता है।

यदि आपका उत्पाद एक ऐसा उपकरण है जिसमें एक संबद्ध ऐप या वेब पेज नहीं है (उदाहरण के लिए, एक फिटनेस ट्रैकर, एक उपकरण या एक सुरक्षा पैनल), तो रीडायरेक्ट URI फ़ील्ड को खाली छोड़ दें।

यदि आपके उत्पाद में एक ब्राउज़र घटक है, तो सबसे अच्छा अभ्यास एक अनुप्रेषित यूआरआई शामिल करना है।

अनुमति का अनुरोध करें

क्लाइंट कॉन्फ़िगरेशन में अनुमतियों का एक सेट (जिसे स्कोप भी कहा जाता है) शामिल है। एक अनुमति एक चर पैरामीटर है जो संसाधनों और परिचालनों के सेट को नियंत्रित करता है जो एक पहुंच परमिट है। यह आम तौर पर समय-समय पर पहुंच के बजाय, आगे बढ़ने की अनुमति के लिए अनुमतियों का अनुरोध करने का सबसे अच्छा अभ्यास है।

परिणाम

जब आप कॉन्फ़िगरेशन को सहेजते हैं, तो आपके क्लाइंट को एक विशिष्ट क्लाइंट आईडी और क्लाइंट सीक्रेट सौंपा जाता है। इसके अलावा, आपके क्लाइंट को एक प्राधिकरण URL सौंपा गया है।

प्राधिकरण URL में एक राज्य पैरामीटर शामिल है जिसे आप संभावित क्रॉस-साइट अनुरोध जालसाजी (CSRF) हमलों के लिए परीक्षण करने के लिए उपयोग कर सकते हैं। CSRF हमलों के लिए टेस्ट देखें।

OAuth विवरण

एक प्राधिकरण कोड का अनुरोध करें

आपके क्लाइंट के कॉन्फ़िगर होने के बाद, आप एक प्राधिकरण कोड (जिसे कभी-कभी पिन कोड कहा जाता है) का अनुरोध कर सकते हैं। प्राधिकरण कोड अंतिम टोकन नहीं है जिसका उपयोग आप नेस्ट को कॉल करने के लिए करते हैं। इसका उपयोग वास्तविक पहुंच टोकन के बदले विनिमय करने के लिए OAuth 2.0 प्रवाह के अगले चरण में किया जाता है। यह कदम उपयोगकर्ता को नेस्ट से सीधे आश्वासन देता है कि सहमति-प्राप्त एक्सेस के साथ, सही उत्पाद को अनुमति दी जा रही है।

उपयोगकर्ता अनुभव

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

इसे स्वयं जांचने के लिए, प्राधिकरण URL को चरण 1 से एक ब्राउज़र में लोड करें। आपको नेस्ट एक्सेस अनुरोध पृष्ठ के साथ एक वर्क्स देखना चाहिए:

नेस्ट के साथ काम करता है

आगे बढ़ो और क्लिक करें [ACCEPT] खुद को देखने के लिए कि उपयोगकर्ता क्या देखता है। [ACCEPT] बटन पर क्लिक करके, उपयोगकर्ता आपके डेटा तक पहुँचने के लिए आपके उत्पाद के अनुरोध को अनुमोदित कर रहा है।

पिन अनुभव

यदि आप अपने क्लाइंट कॉन्फ़िगरेशन में रिडायरेक्ट URI फ़ील्ड्स को खाली छोड़ देते हैं, तो उपयोगकर्ता एक Nest पृष्ठ पर पुनर्निर्देशित होता है जो एक पिन (प्राधिकरण कोड) प्रदर्शित करता है। तब आपके डिवाइस UI को उपयोगकर्ता को पिन को मैन्युअल रूप से दर्ज करने के लिए संकेत देना चाहिए।

पिन कोड

URI अनुभव को पुनर्निर्देशित करें

यदि आप अपने क्लाइंट कॉन्फ़िगरेशन में एक पुनर्निर्देशित यूआरआई शामिल करते हैं, तो उपयोगकर्ता आपके क्लाउड (या लोकलहोस्ट) में एक पृष्ठ पर पुनर्निर्देशित होता है, और नेस्ट स्वचालित रूप से उपयोगकर्ता के डिवाइस को प्राधिकरण कोड भेजता है।

सीएसआरएफ हमलों के लिए परीक्षण

प्राधिकरण कोड को स्वीकार करने से पहले, आपके उत्पाद को यह सुनिश्चित करना चाहिए कि राज्य पैरामीटर में लौटाया गया मूल्य आपके मूल प्राधिकरण अनुरोध से राज्य के मूल्य से मेल खाता है। यह सुनिश्चित करता है कि आप वास्तविक उपयोगकर्ता के साथ काम कर रहे हैं न कि कोई दुर्भावनापूर्ण स्क्रिप्ट। यदि राज्य मान मेल नहीं खाते हैं, तो आपको प्रतिक्रिया में 401 अनधिकृत HTTP त्रुटि कोड फेंकना चाहिए।

CSRF हमला एक ऐसा हमला है जो एक अंतिम उपयोगकर्ता को एक वेब एप्लिकेशन पर अवांछित कार्यों को निष्पादित करने के लिए मजबूर करता है जिसमें वे वर्तमान में प्रमाणित होते हैं।

CSRF का हमला
CSRF का हमला

CSRF के हमलों को रोकने में मदद करने के लिए, हम अनुशंसा करते हैं कि प्राधिकरण का अनुरोध करते समय आप हमेशा एक अप्राप्य state प्रस्तुत करें।

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

उदाहरण:

मान लें कि आपके क्लाइंट कॉन्फ़िगरेशन में, आप यूआरआई को रीडायरेक्ट करते हैं:

 http://localhost:5000/callback
 

मान लें कि आपका क्लाइंट प्राधिकरण URL में 7tvPJiv8StrAqo9IQE9xsJaDso4 राज्य भेजता है:

 https://home.nest.com/login/oauth2?client_id=CLIENT_ID&state=7tvPJiv8StrAqo9IQE9xsJaDso4
 

उपयोगकर्ता अनुरोध के लिए सहमति देता है।

नेस्ट क्लाउड राज्य पैरामीटर को पुनर्निर्देशित URI के हिस्से के रूप में लौटाता है:

 127.0.0.1 - - [02/Jun/2017 13:18:58] "GET /callback?state=7tvPJiv8StrAqo9IQE9xsJaDso4&code=5N4CFK8E8TCFW7PM HTTP/1.1" 302 -
127.0.0.1 - - [02/Jun/2017 13:18:58] "GET / HTTP/1.1" 200 -
 

आपके उत्पाद को यह राज्य मूल्य प्राप्त होता है और इसे केवल एक सत्यापन योग्य स्थिति के साथ रीडायरेक्ट स्वीकार करने के लिए प्रोग्राम किया जाना चाहिए।

एक गैर-अनुमानित राज्य पैरामीटर उत्पन्न करने के कई तरीके हैं। आप स्मृति में रखे गए शब्दकोश या एक पुनर्मुद्रित मूल्य से यादृच्छिक राज्य मान प्रदान कर सकते हैं। आप कुछ आसानी से सत्यापन योग्य चर के साथ एक निजी कुंजी का उपयोग कर सकते हैं - उदाहरण के लिए, ग्राहक आईडी और एक सत्र कुकी - एक हैशेड मूल्य की गणना करने के लिए। यह एक बाइट मान में परिणाम करता है जिसे निजी कुंजी के बिना अनुमान लगाना मुश्किल है। एक अन्य सुझाव वर्तमान तिथि और समय हैश करने का है। इस दृष्टिकोण के साथ, आपके आवेदन को इसे सत्यापित करने या वैधता की एक स्लाइडिंग अवधि (उदाहरण के लिए, समय-आधारित वन-टाइम पासवर्ड एल्गोरिथ्म [टीओटीपी] का उपयोग करके) की अनुमति देने के लिए संचरण का समय बचाना चाहिए।

की-हैश मैसेज ऑथेंटिकेशन कोड (HMAC) की गणना करने के बाद, बेस -64 इसे एनकोड करता है और इसे नेस्ट क्लाउड पर एक स्टेट पैरामीटर के रूप में पास करता है।

यहाँ पायथन उदाहरण दिया गया है जो datetime का उपयोग करता है:

 import base64
import datetime
import hmac
import hashlib

def generate_state_parameter(client_id, private_key):
    date = datetime.datetime.today()
    raw_state = str(date) + client_id
    hashed = hmac.new(private_key, raw_state, hashlib.sha1)
    state = base64.b64encode(hashed.digest())
    return (state, date)
 

प्राधिकरण कोड त्रुटि संदेश

यदि प्राधिकरण कोड अनुरोध विफल हो जाता है, तो उपयोगकर्ताओं को एक त्रुटि संदेश दिखाई देता है। इन संदेशों की अधिक जानकारी और उन्हें रोकने के तरीके के लिए, प्राधिकरण संदर्भ देखें

एक पहुंच टोकन के लिए विनिमय प्राधिकरण कोड

एक्सेस टोकन प्राप्त करने का अंतिम चरण आपके उत्पाद के लिए प्राधिकरण कोड का उपयोग करके एक के लिए पूछना है जिसे उसने अधिग्रहित किया है। यह एक "x-www-form-urlencoded" HTTP POST अनुरोध बनाकर किया जाता है।

अनुरोध में नीचे दिए गए पैरामीटर शामिल करें। सभी चार मापदंडों की आवश्यकता है।

पैरामीटर विवरण
ग्राहक ID चरण 1 में क्लाइंट आईडी
client_secret चरण 1 में ग्राहक गुप्त
कोड चरण 2 में प्राप्त प्राधिकरण कोड
grant_type इस फ़ील्ड का मान हमेशा होना चाहिए: authorization_code

प्रत्येक POST कॉल से पहले, एक नया प्राधिकरण कोड प्राप्त करें। ऐसा करने के लिए, अपने प्राधिकरण URL को पुनः लोड करें। फिर नए प्राधिकरण कोड को शामिल करने के लिए POST के code पैरामीटर को बदलें।

कोड उदाहरण (सामान्य)

विभिन्न भाषाओं में उदाहरण देखें

डाकिया उदाहरण (सामान्य)

पोस्टमैन OAuth अनुरोधों का परीक्षण करने का एक आसान तरीका प्रदान करता है।

शीर्ष लेख टैब पर, सामग्री-प्रकार = application/x-www-form-urlencoded

पहुंच टोकन प्राप्त करने के लिए पोस्ट हेडर

बॉडी टैब पर, निम्न कुंजी शामिल करें: मान जोड़े।

पहुँच टोकन प्राप्त करने के लिए POST बॉडी

पहुँच टोकन प्रतिक्रिया

एक सफल अनुरोध एक JSON वस्तु देता है जिसमें निम्नलिखित क्षेत्र होते हैं:

  • access_token - उपयोगकर्ता के लिए पहुँच टोकन। यह मान सुरक्षित रखा जाना चाहिए।
  • expires_in - टोकन समाप्त होने से पहले, जिस समय यह अनुरोध किया गया था, शेष सेकंड की संख्या।

टोकन त्रुटि संदेशों तक पहुँचें

यदि अनुरोध विफल रहता है, तो आपको HTTP स्थिति कोड के रूप में एक त्रुटि प्राप्त होती है। इन त्रुटियों के बारे में अधिक जानकारी के लिए और उन्हें कैसे रोका जाए, प्राधिकरण संदर्भ देखें

प्रामाणिक अनुरोध करें

किसी उत्पाद को एक्सेस टोकन प्राप्त करने के बाद, वह HTTP प्रमाणीकरण शीर्ष लेख में Nest API पर टोकन भेजता है। यूआरआई क्वेरी-स्ट्रिंग मापदंडों के रूप में टोकन भेजना संभव है, लेकिन हम इसकी अनुशंसा नहीं करते हैं, क्योंकि यूआरआई पैरामीटर लॉग फाइलों में समाप्त हो सकते हैं जो पूरी तरह से सुरक्षित नहीं हैं।

टोकन अनुरोध के दायरे में वर्णित संचालन और संसाधनों के सेट के लिए केवल एक्सेस टोकन मान्य हैं। उदाहरण के लिए, यदि नेस्ट थर्मोस्टेट एपीआई के लिए एक एक्सेस टोकन जारी किया जाता है, तो यह नेस्ट कैमरा एपीआई तक पहुंच प्रदान नहीं करता है।

कोड उदाहरण (पढ़ें / लिखें)

डाकिया उदाहरण (पढ़ें / लिखें)

Postman Content-Type = application/json का उपयोग करके API कॉल का परीक्षण करने का एक आसान तरीका प्रदान करता है।

डेटा पढ़ने के लिए प्राप्त करें

अमान्य टोकन

यदि आप अमान्य टोकन का उपयोग करके एपीआई कॉल करते हैं, तो आपको सर्वर से 401 अनधिकृत प्रतिक्रिया मिलती है। एक टोकन अमान्य और पुनर्जनन की आवश्यकता हो सकती है क्योंकि:

  • इसकी समय सीमा समाप्त हो गई है
  • उपयोगकर्ता ने आपके उत्पाद को शुरू में दी गई अनुमति को रद्द कर दिया है

यह महत्वपूर्ण है कि आप अपने उत्पाद को लेखक के वर्कफ़्लो की शुरुआत में वापस उपयोगकर्ता को पुनर्निर्देशित करके 401 अनधिकृत त्रुटि को ठीक से संभालने के लिए कोड करें।

नेस्ट कनेक्शन के साथ काम बंद कर दिया

यदि कोई उपयोगकर्ता नेस्ट कनेक्शन के साथ एक वर्क्स हटाता है, तो आपके उत्पाद को एक auth_revoked ईवेंट प्राप्त होता है और कनेक्शन बंद हो जाता है।