2016-01-28 8 views
10

लक्ष्यपोस्टमैन संग्रह में ओएथ 2 टोकन (या रीफ्रेश टोकन का उपयोग कैसे करें) को कैसे बनाए रखें?

हर कॉल को व्यक्तिगत रूप से संग्रह चलाने से पहले के प्राधिकरण प्रक्रिया से गुजर रही बिना एक संग्रह को चलाने के लिए सक्षम हो।

मैं क्या प्रयास किया है/डाकिया में OAuth2 प्राधिकरण सहायक का उपयोग करते समय देखा

  1. , मैं एक लौट आए ताज़ा टोकन बचाने के लिए, और इस तरह जब पहुँच इसका इस्तेमाल करने के लिए एक विधि पता नहीं लगाया टोकन एक नया पाने के लिए समाप्त हो जाता है। (मैंने सुझाव दिया है कि इस सुविधा को पोस्टमैन गिथब मुद्दे में सहायक में रखा जाए।)

  2. मैंने सहायक की प्रतिलिपि बनाने के लिए संग्रह की शुरुआत में कुछ कदम बनाने की कोशिश की है, लेकिन वह कदम नहीं उठा सकता उपयोगकर्ता इंटरैक्शन को स्वीकृति/अस्वीकार करने की आवश्यकता होती है (जो समझ में आता है क्योंकि यह अन्यथा सुरक्षा जोखिम है)। हालांकि, मुझे लगता है कि उपयोगकर्ता को कैसे संकेत देना है, ओएथ 2 सहायक कैसे करता है।

  3. मैंने रीफ्रेश टोकन के संबंध में अपनी अपेक्षाओं को एक पायदान नीचे ले लिया है और सोचा है कि मैं सूची में पहले टेस्ट पर प्रमाणीकरण चला सकता हूं, किसी भी तरह वैश्विक या पर्यावरण चर में पहुंच टोकन को सहेज सकता हूं, और फिर सभी बाद के परीक्षणों में उस टोकन का उपयोग करके, लेकिन मुझे OAuth2 सहायक के माध्यम से उत्पन्न पहुंच टोकन को सहेजने का कोई तरीका नहीं मिला है।

मुझे यह जानना अच्छा लगेगा कि इसका कोई समाधान है या नहीं, जिसके परिणामस्वरूप संकलन को कम से कम प्रयास के साथ चलाने में सक्षम किया जा सकता है। संग्रह में लिखे गए अधिक परीक्षणों के साथ यह अधिक महत्वपूर्ण हो जाता है जो सभी OAuth2 प्रमाणीकरण का उपयोग करते हैं।

साइड नोट: मैं पोस्टमैन मैक क्लाइंट का उपयोग कर रहा हूं, अगर क्लाइंट में कोई अलग है तो मुझे अनजान है।

उत्तर

12

मुझे एक उत्तर here on github मिला।

पहले, सेटअप इन वातावरण चर:

  • url: (अपने एपीआई अंतिम बिंदु)
  • access_token: (खाली)
  • refresh_token: (खाली)
  • client_id: (अपने client_id)
  • client_secret: (आपका क्लाइंट_सेक्रेट)
  • username: (अपने उपयोगकर्ता नाम)
  • password: (आपका पासवर्ड)

इसके बाद, एक नया कॉल जो passwordgrant_type का उपयोग कर एक access_token हो जाता है पैदा करते हैं।

मेरे मामले में, मैं {{url}}/access_token पर पोस्ट करता हूं।

  • grant_type: password
  • username: {{username}}
  • password: {{password}}
  • client_id: {{client_id}}
  • इस कॉल के साथ भेजा गया form-data कुंजी/मान जोड़े शारीरिक टैब में विनिर्दिष्ट निम्न जानकारी है client_secret: {{client_secret}}

भेजा जा रहा है यह पोस्ट इस प्रतिक्रिया की तरह कुछ में परिणाम होगा:

{ 
    "access_token": "kciOMpcmRcGTKfoo", 
    "token_type": "Bearer", 
    "expires_in": 3600, 
    "refresh_token": "DMGAe2TGaFbar" 
} 

फिर, टेस्ट टैब में, मैं वातावरण चर के दो, access_token और refresh_token आवंटित करने के लिए निम्नलिखित कोड जोड़ा।

var data = JSON.parse(responseBody); 
postman.setEnvironmentVariable("access_token", data.access_token); 
postman.setEnvironmentVariable("refresh_token", data.refresh_token); 

नोट: मैं भी वहाँ में एक परीक्षण में कहें, बस सुनिश्चित करें कि कम से कम इस फोन के रूप में अच्छी तरह से ठीक से काम करने के लिए, हालांकि इस मूल प्रश्न के साथ कोई संबंध नहीं है:

var jsonData = JSON.parse(responseBody); 
tests["token_type is Bearer"] = jsonData.token_type === "Bearer"; 

अब किसी भी मैं जो नया कॉल बनाता हूं वह access_token का उपयोग उस पहले कॉल द्वारा जेनरेट किए गए पर्यावरण चर के रूप में किया जा सकता है: {{access_token}}। मेरे मामले में, मैं एक कॉल/परीक्षा में हेडर टैब पर जाएँ और इस कुंजी/जोड़ी जोड़ें:

  • Authorization: Bearer {{access_token}}

बोनस अंक: मैं यहां एक उदाहरण नहीं दिया है, लेकिन सैद्धांतिक रूप से मैं एक पूर्व-अनुरोध स्क्रिप्ट जोड़ सकता हूं जो एपीआई के खिलाफ वर्तमान (गैर-खाली) access_token का परीक्षण करता है और यदि यह विफल रहता है, तो दिए गए (गैर-खाली) refresh_token का उपयोग करके एक नया प्राप्त करें। इससे ऐसा हो जाएगा इसलिए मुझे टोकन की समाप्ति तक पहुंचने की चिंता नहीं करनी पड़ेगी।

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

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

+0

यह थोड़ी देर हो गया है, और चूंकि किसी और ने उत्तर नहीं दिया, इसलिए मैंने इसे सही के रूप में चिह्नित किया। –

+0

मैं टेस्ट टैब पर इतना खो गया हूं और यह मेरी कॉल के साथ कैसे लिंक करता है। – user919426

19

ठीक है, पहले अपना ओउथ टोकन यूआरएल दर्ज करें, बॉडी टैब पर क्लिक करें, और इन पोस्ट पैरामीटर को भरें: client_id, grant_type, उपयोगकर्ता नाम, पासवर्ड, ओवरराइड।

var data = JSON.parse(responseBody); 
postman.setGlobalVariable("access_token", data.access_token); 
postman.setGlobalVariable("refresh_token", data.refresh_token); 

enter image description here

फिर अपने आवेदन URL में से एक में प्रवेश, हेडर टैब पर क्लिक करें:

enter image description here

फिर, टेस्ट टैब पर, क्लिक करें इस पाठ दर्ज करें और फिर भेजें दबाएँ , और एक मान Beerr {{access_token}} के साथ पैरामीटर प्रमाणीकरण दर्ज करें। फिर भेजें पर क्लिक करें।

enter image description here

देखा!

+2

धन्यवाद, आपका उत्तर बहुत अच्छा है! क्या आप refresh_token का उपयोग करने के तरीके पर एक उदाहरण देकर इसे पूरा कर सकते हैं। –

+0

हां, अद्भुत जवाब, ऊपर उठाया गया ... अगर आप refres_token का उदाहरण शामिल कर सकते हैं तो यह बहुत ही अच्छा होगा –

संबंधित मुद्दे