c# - एज़्यूर एडी OAuth2 पहुंच टोकन अनुरोध त्रुटि-400 बुरा अनुरोध




azure active-directory (2)

मेरा WPF डेस्कटॉप अनुप्रयोग (सी #) उपयोगकर्ता के आउटलुक ईमेल को Microsoft ग्राफ़ एपीआई के माध्यम से पढ़ने का प्रयास कर रहा है। मैं प्रमाणीकरण प्रक्रिया में फंस गया हूं; मुझे पहले ही एक प्रमाणीकरण कोड प्राप्त हुआ है और अब मैं ऐज़ुर से एक टोकन का उपयोग करने की कोशिश कर रहा हूं, लेकिन पहुंच टोकन के लिए अनुरोध भेजते समय एक HTTP 400 त्रुटि कोड प्राप्त करना जारी रखें:

/**** Auth Code Retrieval ****/
string authCodeUrl = "https://login.microsoftonline.com/common/oauth2/authorize";
authCodeUrl += "?client_id" = clientId;
authCodeUrl += "&redirect_uri=" + redirectUri;
authCodeUrl += "&response_type=code";
authCodeUrl += "&resource=https%3A%2F%2Fgraph.microsoft.com%2F";
Process.start(authUrl); // User logs in, we get the auth code after login
string code = "......"; // Hidden for this post

/**** Access Token Retrieval ****/
string tokenUrl = "https://login.microsoftonline.com/common/oauth2/token"
string content = "grant_type=authorization_code";
content += "&client_id=" + clientId;
content += "&resource=https%3A%2F%2Fgraph.microsoft.com%2F";
content += "&code=" + code;
content += "&redirect_uri=" + redirectUri;
WebRequest request = WebRequest.Create(tokenUrl);
request.ContentType = "application/x-www-form-urlencoded";
byte[] data = Encoding.UTF8.GetBytes(content);
request.ContentLength = data.Length;
request.Method = "POST";
try 
{
  using (Stream stream = request.GetRequestStream())
  {
    stream.Write(data, 0, data.Length);
  }
  WebResponse response = request.GetResponse(); // This throws exception
}
catch (Exception error) // This catches the exception
{
  Console.WriteLine(error.Message); // Outputs 400, bad request
}

उपरोक्त कोड का उपयोग एट कोड प्राप्त करने के लिए किया जाता है, जिसके बाद प्रवेश टोकन को पुनर्प्राप्त करने का प्रयास किया जाता है। हमारे पास कोई क्लाइंट नहीं है क्योंकि गुप्त वेब अनुप्रयोगों के लिए ही हैं और यह एक मूल डेस्कटॉप WPF अनुप्रयोग है। मैंने पढ़ा है कि यह कोई समस्या नहीं है, हालांकि। मैंने कई ट्यूटोरियल और आधिकारिक दस्तावेज़ों का ऑनलाइन पालन किया है, मुख्यतः आधिकारिक ग्राफ़ प्रमाणीकरण दस्तावेज़ और मैं अभी भी यह नहीं समझ सकता कि मैं क्या कर रहा हूं। किसी भी मदद की काफी सराहना की जाएगी, धन्यवाद


मैंने निवेदक को अनुरोध को डिबग करने के लिए इस्तेमाल किया और मुझे पूरा त्रुटि संदेश मिला: उपयोगकर्ता या व्यवस्थापक ने आवेदन का उपयोग करने के लिए सहमति नहीं दी है । मैंने इस सन्देश को कुछ के लिए गॉगल कर दिया और कुछ स्टैक आलेख और गिटौब इश्यू धागे पाया जो मुझे समाधान के लिए नेतृत्व करते हैं: मेरा अनुरोध मूल यूआरएल में "सामान्य" का उपयोग कर रहा था, जैसा कि वास्तव में मुझे अपने एज़ूर किरायेदार का उपयोग करने की आवश्यकता होती है आईडी जो मैंने स्टैक पर इस उत्तर के माध्यम से हासिल की थी। प्रमाणीकरण अनुरोधों के लिए मेरा नया आधार URL अब ऐसा दिखता है:

https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/authorize 

जहां "xxxx-xxx" को आपके एज़ूर किरायेदार आईडी से बदल दिया जाएगा!


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

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

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