2013-09-16 7 views
10

का परीक्षण करते हुए मैं एक ऐप्लिकेशन है जो मैं लिख रहा हूँ जो OAuth 2.0 प्राधिकरण सर्वर के विरुद्ध प्रमाणित करता है। मैं उन हिस्सों का परीक्षण करना चाहता हूं जो लॉग इन करने के बाद ही पहुंच योग्य हैं लेकिन ओथ सर्वर एक बाहरी निर्भरता है जो जटिल और मेरे परीक्षणों को भंग कर देता है।मजाक Oauth प्रदाताओं

कैसे मैं इस बारे में जाना चाहिए पर कोई सुझाव? इस तरह के कुछ के लिए उद्योग अभ्यास क्या करता है? मेरा आंत महसूस किसी भी तरह से सर्वर को नकल करना है ताकि यह संरक्षित संसाधनों तक पहुंच की अनुमति दे।

मामले यह मायने रखता है में, यह एक अजगर webapp बोतल का उपयोग कर लिखा है।

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

+0

आमतौर पर, "बाहरी" ओथ (सेवा ट्विटर, एवरोटोट आदि के लिए) हमारे परीक्षण करने के लिए एक सानबॉक्स प्रदान करते हैं। क्या आपको उस उद्देश्य के लिए कोई नहीं मिला है? –

+0

लेकिन फिर भी उन्हें आपके खिलाफ प्रमाणित करने की आवश्यकता होगी? बस वे आपको परीक्षा के लिए डमी प्रमाण पत्र भेजते हैं? –

+0

हां निश्चित रूप से उन्हें इसकी आवश्यकता है।हाँ वे एक डमी प्रमाण पत्र या समकक्ष लौट आए। Evernote, उदाहरण के लिए, केवल परीक्षण उद्देश्य के लिए विशेष कुंजी प्रदान करता है। और यह एपीआई के साथ हमारे देव को खत्म करने की चाल है। एक बार जब आप उत्पादन में धक्का देने के लिए अपने देव को घुमाएंगे, तो आपको उत्पादन के लिए नई एपीआई कुंजी मिल जाएगी। –

उत्तर

8
उपभोक्ता से

(यानी आपके आवेदन) की ओर, OAuth2 प्रक्रिया को दो भागों में विभाजित किया जा सकता:

  1. OAuth2 प्रदाता के "अधिकृत करें" यूआरएल
  2. के आदान-प्रदान करने के लिए अपने आवेदन से रीडायरेक्ट "कोड" पहुँच टोकन

# 1 आप सभी परीक्षण की आवश्यकता के लिए के लिए OAuth2 प्रदाता द्वारा दिया है कि जब आप मार्ग कि प्रमाणीकरण प्रक्रिया शुरू होता है आह्वान प्रतिसाद दिया OAuth2 प्रदाता के लिए एक रीडायरेक्ट है। यह आसानी से फ्लास्क के test client के साथ पूरा किया जाता है। प्रतिक्रिया में आपके OAuth2 प्रदाता के लिए प्राधिकृत URL पर 302 का एक स्टेटस कोड होना चाहिए और "स्थान" हेडर सेट होना चाहिए। ध्यान दें कि आपको प्रदाता होने की आवश्यकता नहीं है, आप केवल परीक्षण कर रहे हैं कि प्रतिक्रिया एक रीडायरेक्ट है, लेकिन आपको वास्तव में रीडायरेक्ट करने की आवश्यकता नहीं है।

# 2 के लिए परीक्षण में थोड़ा और अधिक शामिल है। आपके फ्लास्क ऐप में एक विशेष यूआरएल है जिसे ओएथ 2 प्रदाता के लिए "रीडायरेक्ट यूआरएल" के रूप में नामित किया गया है ताकि आपको प्राधिकरण कोड वापस भेज दिया जा सके। आप इस यूआरएल को सिर्फ नकली परीक्षण क्लाइंट के साथ एक नकली कोड पास कर सकते हैं और इसमें कोई समस्या नहीं है।

समस्या यह है कि है कि आपके रीडायरेक्ट URL संभालती दृश्य समारोह में आप पहुँच टोकन के प्रमाणन कोड का आदान प्रदान करने OAuth2 प्रदाता को लागू करने की जरूरत है, और इस तुल्यकालिक किया जाता है। ऐसा करने के लिए आप app.config['TESTING'] जाँच करने के लिए और उस मामले में वास्तविक अनुरोध छोड़ सकते हैं और एक नकली प्रतिक्रिया है कि एक नकली पहुँच टोकन शामिल के साथ बदलने के लिए है इस लेन-देन को रोकने के लिए।

तब से

पर आप भी नकली OAuth2 प्रदाता में कोई अतिरिक्त कॉल कि पहुँच टोकन भेज डेटा का अनुरोध करने की आवश्यकता होगी।

यदि आप अपने फ्लास्क ऐप में ओएथ 2 क्लाइंट लाइब्रेरी का उपयोग कर रहे हैं तो अपने आवेदन में परीक्षण अपवादों के बिना नकली प्रदाता बनाना आसान हो सकता है। मेरे मामले में मैं rauth का उपयोग कर रहा हूं, और इसके लिए मैंने OAuth2Service कक्षा का उप-वर्ग बनाया है जो उचित तरीकों को ओवरराइड करता है और वास्तविक सत्र से मैंने जो नकली डेटा कैप्चर किया है, उसके साथ प्रतिक्रिया करता है। फिर मेरे परीक्षण सेटअप में मैं सिर्फ नकली सेवा बनाता हूं और एप्लिकेशन को यह सोचने में बेवकूफ़ बना दिया जाता है कि यह एक वास्तविक सर्वर से बात कर रहा है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

तो OAuth2Service को उप-वर्गीकरण के लिए, आपको सत्र के निर्माण को पर्याप्त रूप से अलग करना होगा ताकि आप OAuth2Service के किस संस्करण को तत्काल करने के लिए निर्देशित कर सकें जाँच? – Basil