2017-07-31 6 views
5

मेरे वेब सेवा वर्तमान में बुनियादी उपयोगकर्ता नाम कर रहा है/पासवर्ड प्रमाणीकरण का उपयोग करने की:नीचे की तरह OAuth के साथ प्रमाणित करने के लिए कैसे आदेश घटनाओं (नई मेल घटना आदि की तरह) प्राप्त करने के लिए विदेशी मुद्रा उपयोगकर्ता सदस्य बनने के लिए EWS एपीआई

var service = new ExchangeService(exchangeVersion) 
            { 
             KeepAlive = true, 
             Url = new Uri("some autodiscovery url"), 
             Credentials = new NetworkCredential(username, password) 
            }; 

var subscription = service.SubscribeToPushNotifications(
            new[] { inboxFolderFoldeID }, 
            new Uri("some post back url"), 
            15, 
            null, 
            EventType.NewMail, 
            EventType.Created, 
            EventType.Deleted, 
            EventType.Modified, 
            EventType.Moved, 
            EventType.Copied); 

अब, मुझे OAuth प्रोटोकॉल का उपयोग करने के लिए प्रमाणीकरण तंत्र को प्रतिस्थापित करना है। मैंने कुछ उदाहरण देखा लेकिन उनमें से सभी क्लाइंट को प्रमाणित करने के बारे में बात कर रहे हैं (https://msdn.microsoft.com/en-us/library/office/dn903761%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396) लेकिन कहीं भी मैं ओएथ प्रोटोकॉल के साथ एक एक्सचेंज उपयोगकर्ता को प्रमाणीकृत करने का उदाहरण नहीं ढूंढ पाया। कोई भी कोड नमूना बहुत मदद करेगा। धन्यवाद।

+0

ईडब्ल्यूएस के लिए ओथ की जांच करते समय एक और चीज आई, यह केवल कार्यालय 365 के लिए उपलब्ध है, न कि एक्सचेंज सर्वर के लिए। https://msdn.microsoft.com/en-us/library/office/dn903761(v=exchg.150).aspx कहता है कि "ईडब्ल्यूएस के लिए ओथ प्रमाणीकरण केवल Office 365 के हिस्से के रूप में एक्सचेंज में उपलब्ध है। ईडब्ल्यूएस अनुप्रयोगों की आवश्यकता होती है "उपयोगकर्ता के मेलबॉक्स" अनुमति "तक पूर्ण पहुंच। – tavier

+0

दुर्भाग्यवश कोई भी लिंक ईडब्ल्यूएस प्रबंधित एपीआई के साथ काम करने के तरीके के बारे में बात नहीं करता है। प्रश्न में पोस्ट किया गया msdn url उपयोगकर्ता को प्रमाणित नहीं करता है, लेकिन क्लाइंट को अधिकृत करने के लिए यह – tavier

+0

है क्या आपने https://blogs.technet.microsoft.com/ronba/2016/05/09/using-powershell पर देखा है -और-द-ऑफिस -365-आराम-एपी-साथ-ओथ /? – Eris

उत्तर

0

मामले में किसी को अभी भी यह काम करने के लिए पाने के लिए जूझ रहा है। हमें एप्लिकेशन के लिए एज़ूर पोर्टल पर एक प्रमाणपत्र मैनिफेस्ट अपलोड करने की आवश्यकता है और फिर एक्सेस टोकन प्राप्त करने के लिए क्लाइंट को प्रमाणीकृत करने के लिए उसी प्रमाणपत्र का उपयोग करना होगा। अधिक जानकारी के लिए कृपया देखें: https://blogs.msdn.microsoft.com/exchangedev/2015/01/21/building-daemon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow/

4

यह स्पष्ट नहीं है कि 'वेब सेवा' के साथ आपका क्या मतलब है और आप वर्तमान में उपयोगकर्ता नाम और पासवर्ड कैसे प्राप्त करते हैं। यदि वह किसी प्रकार की वेबसाइट है जहां उपयोगकर्ता को लॉगिन करने या क्रेडेंशियल्स पास करने की आवश्यकता होती है, तो आपको ब्राउज़र से ओएथ 2 अनुदान शुरू करना होगा क्योंकि क्लाइंट ब्राउज़र को implicit grant या code grant शुरू करने के लिए प्राधिकरण अंतराल पर रीडायरेक्ट करना होगा। उपयोगकर्ता को कोड या एक्सेस टोकन (अनुदान के आधार पर) लॉग इन करने के बाद OAuth2 सर्वर (और आपके एप्लिकेशन में नहीं) पर एक लॉगिन स्क्रीन प्रस्तुत की जाएगी, जिसे आप ExchangeService कन्स्ट्रक्टर में उपयोग कर सकते हैं ।

यदि वह 'वेब' सेवा कुछ कंप्यूटर है जो उपयोगकर्ता कंप्यूटर पर चलती है तो आप नीचे वर्णित विधियों में से एक का उपयोग कर सकते हैं।

प्राप्त AccessToken AuthenticationContext

उदाहरण लगता है का उपयोग कर AuthenticationContext वर्ग के एक पुराने संस्करण के आधार पर किया जाना है।

other version, नए हो रहा है भी AcquireToken अब AcquireTokenAsync/AcquireTokenSilentAsync नाम दिया गया है।

कोई फर्क नहीं पड़ता कि आप किस संस्करण का उपयोग कर रहे हैं, आप अपने वर्तमान कोड में उपयोगकर्ता नाम और पासवर्ड पास नहीं कर पाएंगे। हालांकि, आप उपयोगकर्ता को क्रेडेंशियल के लिए AcquireToken[Async] विधि संकेत दे सकते हैं। जो, ईमानदार बनें, अधिक सुरक्षित है और फिर अपने एप्लिकेशन को उन उपयोगकर्ता रहस्यों से सीधे निपटने दें। आपके जाने से पहले, आप डेटाबेस में सादे पाठ पासवर्ड संग्रहीत करेंगे (आशा है कि आप पहले से नहीं हैं)।

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

शीघ्र व्यवहार ऑटो, दोनों vesions में , का अर्थ है: उपयोगकर्ता को क्रेडेंशियल के लिए कहा जाएगा जब वे पहले से ही कैश नहीं किए गए हैं। AuthenticationContext दोनों रचनाकार आपको टोकन-कैश पास करने की अनुमति देते हैं, जो कुछ आप स्वयं को कार्यान्वित कर सकते हैं f.e. स्मृति फ़ाइल, फ़ाइल या डेटाबेस में टोकन कैश करने के लिए (उदाहरण फ़ाइल कैश कार्यान्वयन के लिए this article देखें)।

AccessToken जाओ मैन्युअल

तुम सच में उपयोगकर्ता को संकेत दिए बिना कोड से उपयोगकर्ता क्रेडेंशियल में पास करना चाहते हैं, वहाँ हमेशा के चारों ओर एक रास्ता है।इस मामले में आपको OAuth2 विशिष्टता/RFC6749 में उल्लिखित Resource Owner Password Credentials grant को लागू करना होगा।

संयोग या नहीं, मैं अगर आप इस मार्ग आपको लगता है कि कोड में खुदाई कर सकते हैं जाने के लिए, विशेष रूप से this method से शुरू करना चाहते हैं, oauth2-client-handler कहा जाता है एक खुला स्रोत पुस्तकालय है कि HttpClient साथ प्रयोग के लिए इस को लागू करता है, लेकिन वैसे भी।

उपयोग पहुंच टोकन

जब आप पहुंच टोकन है, तो आप this MSDN page पर नमूने के साथ आगे बढ़ सकते हैं, f.e .:

var service = new ExchangeService(exchangeVersion) 
        { 
         KeepAlive = true, 
         Url = new Uri("some autodiscovery url"), 
         Credentials = new OAuthCredentials(authenticationResult.AccessToken)) 
        }; 
+0

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

+0

इसके अलावा, एक्सचेंज सेवा ऑब्जेक्ट में इंपर्सनेटेड यूसर आईडी नामक एक संपत्ति प्रतीत होती है, इसका मतलब यह है कि मैं उस विशेष उपयोगकर्ता का प्रतिरूपण कर सकता हूं और अधिसूचनाओं के लिए उसे सब्सक्राइब कर सकता हूं। मुझे लगता है कि नहीं, लेकिन सिर्फ यह सुनिश्चित करना चाहता था :) – tavier

+0

संपादन के लिए धन्यवाद, असल में मेरा एप्लिकेशन कुछ अंतराल (बिना किसी यूआई के) के साथ एक वेब एपीआई है, जिसके लिए कुछ ईमेल क्लाइंट के उपयोगकर्ता अपने क्रेडेंशियल्स पास कर रहे हैं (यह वर्तमान प्रवाह है), हालांकि, यदि संभव हो तो हम पासवर्ड पास करने की आवश्यकता को हटाना चाहते हैं। – tavier

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