2012-05-31 8 views
5

मैं वर्तमान में एक clientside सी # आवेदन के साथ OAuth 2.0 उपयोगकर्ता-एजेंट फ्लो उपयोग करने का प्रयास कर रहा हूँ, और मैं अनुप्रेषित यूआरआई से संबंधित कुछ भ्रम की स्थिति में चल रहा हूँ।OAuth उपयोगकर्ता-एजेंट के साथ फ्लो सी # डेस्कटॉप अनुप्रयोग

क्योंकि मैं एक clientside आवेदन के साथ काम कर रहा हूँ, मैं एक वेब सर्वर के लिए एक मानक रीडायरेक्ट URL प्रदान नहीं कर सकते। हालांकि, लोगों के मुताबिक मैं (इस उदाहरण में सेल्सफोर्स) के साथ प्रमाणित करने की कोशिश कर रहा हूं, उपयोगकर्ता-एजेंट फ्लो क्लाइंटसाइड एप्लिकेशन के लिए उपयोग करने के लिए सही है।

मेरे सवाल है, मैं इस स्थिति में पहुँच टोकन को पकड़ने के लिए क्या कर सकते हैं? जाहिरा तौर पर मैं एक "स्थानीय संसाधन ग्राहक के लिए सुलभ," बना सकते हैं, लेकिन मैं इसके पीछे यांत्रिकी के साथ अपरिचित हूँ, और मैं विषय (आंशिक रूप से, क्योंकि मैं देखने के लिए क्या पता नहीं है) पर किसी भी संसाधन नहीं मिल रहा।

मैं कहाँ देख शुरू कर देना चाहिए के रूप में किसी भी संकेत दिए गए बहुत सराहना की जाएगी।


संपादित करें: कुछ और खुदाई निम्नलिखित stackoverflow सवाल से पता चला है:

How do I develop against OAuth locally?

मैं कुछ और अधिक है कि वे क्या सुझाव के साथ जांच कर कर रहा हूँ, लेकिन किसी भी अन्य सुझावों के साथ-साथ बहुत अच्छा होगा।


संपादित करें: कुछ और सर्च कर रहे हैं इस लेख से पता चला:

http://sarangasl.blogspot.com/2010/09/create-simple-web-service-in-visual.html

फिर भी लगता है जैसे मैं बड़ी तस्वीर की समझ के बिना अंधेरे में चारों ओर poking हूँ, लेकिन मेरा मानना ​​है कि मैं करने की जरूरत है लोकलहोस्ट का उपयोग करके एक स्थानीय वेब सेवा स्थापित करें और वहां मेरे रीडायरेक्ट यूआरआई को इंगित करें। इसके बाद मैं ओएथ सर्वर से प्रतिक्रिया को खोलने के लिए अपनी वेब सेवा का उपयोग करूंगा और मेरा आवेदन उचित रूप से जवाब दे सकता हूं। आने के लिए और अधिक अपडेट।


ओउके। तो जो मैं इकट्ठा करने में सक्षम हूं, उससे मुझे ओएथ के लिए कॉलबैक के रूप में आपूर्ति करने के लिए एक स्थानीय वेब सेवा स्थापित करने की आवश्यकता है। मुझे खुद को वेब सेवा पर सुनना होगा और इसे अपने ऐप पर पास करने के लिए कॉलबैक पकड़ना होगा। हालांकि, VS2010 द्वारा प्रदान की गई डिफ़ॉल्ट एएसपी.NET वेब सेवा यूआरएल पैरामीटर का समर्थन नहीं करती है, केवल एपीआई कॉल, इसलिए मुझे स्पष्ट रूप से डब्लूसीएफ रेस्ट स्टार्टर किट का उपयोग करने की आवश्यकता है।

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

उत्तर

4

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

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

रूप में दिखाई देता हालांकि, WebBrowser.Url की निगरानी के द्वारा, मैं, पूरा URL कि मेरी एम्बेडेड WebBrowser नियंत्रण करने के लिए निर्देशित किया गया है ले सकते हैं पहुँच टोकन है कि जोड़ दिया जाता है सहित Salesforce द्वारा। असल में, उपयोगकर्ता प्रमाणीकरण और अनुमति अनुदान के बाद, एम्बेडेड ब्राउज़र को "http://www.dummyurl.com" पर रीडायरेक्ट किया जाता है। Salesforce पहुँच टोकन जोड़ देती है, तो WebBrowser.Url कुछ इस तरह लग रही समाप्त होता है:

http://www.dummyurl.com#access_token=ABCDEF&instance_url=ABCDEF

यहाँ से, मैं सिर्फ यूआरएल को पार्स करने और अपने रास्ते पर जा सकते हैं। कोई तीसरे पक्ष के वेब सर्वर या स्थानीय वेब सेवा की आवश्यकता नहीं है। :)

+2

यह एक विकल्प होगा। लेकिन सावधान रहें: उपयोगकर्ता आपके वेब ब्राउजर पर कुछ चाल का उपयोग कर सकता है जैसे ब्राउज़र इतिहास, पृष्ठ रीफ्रेश, टाइमआउट, नेटवर्क आउटेज के अंदर आगे और पीछे जा रहा है। आपको सभी HTTP त्रुटि कोड + सभी एम्बेडेड ब्राउज़र गंदे चालों को संभालना होगा। शुभकामनाएँ :) –

+0

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

+0

उह, आप सही हैं। मुझे अगली एम्बेडेड ब्राउज़र सुरक्षा पर एक नज़र डालना होगा। जहां तक ​​यूआई हालांकि, मेरा ऐप एक पृष्ठभूमि प्रक्रिया है जो कुछ घटनाओं पर पॉपअप उत्पन्न करती है, इसलिए प्रमाणीकरण केवल प्रति ऐप लॉन्च (आमतौर पर प्रति दिन एक बार) के बाद आवश्यक होता है। हालांकि युक्तियों के लिए धन्यवाद, मैं सुरक्षा छेद के बारे में भूल गया जो संभावित रूप से एक एम्बेडेड आईई उदाहरण के साथ खोला जाएगा। – sichinumi

1

प्राधिकरण प्रकार को कॉल करने के लिए आपको औपचारिक ग्राहक http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com#Obtaining_a_Token_in_an_Autonomous_Client_.28Username-Password_Flow.29 की आवश्यकता है। यूआरएल के बारे में पढ़ें जो आपको वहां भेजना है।

grant_type=password&client_id=<your_client_id>&client_secret=<your_client_secret>&username=<your_username>&password=<your_password> 
+0

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

+0

हालांकि इसे अपनी प्रॉक्सी को श्वेतसूची में रखें। इसके अलावा लिंक 'POST'ed है - इसलिए अनुरोध पैरामीटर HTTPS द्वारा एन्क्रिप्ट किया जाएगा। क्या आपको इस दृष्टिकोण के साथ कोई समस्या है? –

+0

हम्म, मैंने इसे प्रॉक्सी करने के बारे में नहीं सोचा था। हालांकि, मैं अन्य उपयोगकर्ताओं के लिए अन्य व्यावसायिक वातावरण में इस ऐप को विकसित कर रहा हूं, और किसी तृतीय-पक्ष प्रॉक्सी के माध्यम से सभी ट्रैफ़िक को रूट करना एक विकल्प नहीं है। मेरे उपयोगकर्ताओं के विभिन्न संगठनों के लिए श्वेतसूची पर भी मेरा नियंत्रण नहीं है। अंत में, मुझे उपयोगकर्ता-पासवर्ड OAuth प्रवाह से बचने के लिए एपीआई डेवलपर्स द्वारा स्पष्ट रूप से बताया गया था। हालांकि, मुझे व्यक्तिगत रूप से इसमें कोई समस्या नहीं है, लेकिन मेरे दूसरे उत्तर पर नज़र डालें और मुझे बताएं कि आप इसके बारे में क्या सोचते हैं। :) – sichinumi

0

आप DotNetOpenAuth लाइब्रेरी का उपयोग कर सकते हैं। WPF का उपयोग करके एक उदाहरण है, जहां यह DotNetOpenAuth लाइब्रेरी द्वारा प्रदान की गई क्लाइंट प्राधिकरण दृश्य नामक Winforms नियंत्रण का उपयोग करता है।

यह एक ऐसा नियंत्रण है जो ब्राउज़र को होस्ट करता है जो उपयोगकर्ता को एप्लिकेशन छोड़ने के बिना क्लाइंट को अधिकृत करने की इजाजत देता है।

इस सहायता की आशा करें।

सम्मान

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