2012-08-06 17 views
11

मैं सी # (एएसपी.नेट) का उपयोग कर रहा हूं। मैं अपने ऐप में उपयोगकर्ता प्रोफाइल विवरण तक पहुंचने के लिए Google oauth का उपयोग करना चाहता हूं। मुझे सफलतापूर्वक प्रमाणीकरण कोड मिला लेकिन एक्सेस टोकन प्राप्त करने में समस्या हो रही है। मैं Google tutorials पसंद करता हूं। ट्यूटोरियल में, मैंने पढ़ा है कि मुझे अनुरोध भेजना है और Google से प्रतिक्रिया प्राप्त करना है। इसके लिए मैं System.Net.HttpWebRequest/HttpWebResponse का उपयोग करता हूं (क्या मैं सही तरीके से जा रहा हूं)। मैं इस कोड ....google oauth के लिए एक्सेस टोकन कैसे प्राप्त करें?

byte[] buffer = Encoding.ASCII.GetBytes("?code=" + code + "&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://accounts.google.com"); 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 
req.ContentLength = buffer.Length; 

Stream strm = req.GetRequestStream(); 
strm.Write(buffer, 0, buffer.Length); 
strm.Close(); 

HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
Response.Write(((HttpWebResponse)resp).StatusDescription); 

का उपयोग लेकिन, मुझे त्रुटि मिली:

The remote server returned an error: (405) Method Not Allowed.

अद्यतन: यहाँ चर code प्राधिकरण कोड है।

+1

तुम क्यों इस्तेमाल नहीं करते https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2 – user854301

+0

@ user854301 मैं इस लेकिन मैं चाहता था उल्लेख कर सकते हैं यह जानने के लिए कि 'HttpWebRequest/Response' का उपयोग सही है या नहीं? क्या मैं 'HttpWebRequest' से Google को अनुरोध भेज सकता हूं। – Sagar

+0

आपके बफर में "कोड" क्या है ?? – Apoorva

उत्तर

8

मुझे लगता है कि आप गलत एंडपॉइंट में पोस्ट अनुरोध भेज रहे हैं, सही https://accounts.google.com/o/oauth2/token

+2

मैं इसका उपयोग करता हूं, लेकिन यह मुझे अन्य त्रुटि दिखाता है। अब त्रुटि है 'रिमोट सर्वर ने एक त्रुटि लौटा दी: (400) खराब अनुरोध।' मैं गलत कहां जा रहा हूं? – Sagar

+0

अपवाद के विवरण में नीचे ड्रिल करें, पूर्ण त्रुटि संदेश आपको बताएगा कि आपके अनुरोध के साथ क्या गलत है –

4

जैसा कि मैंने गूगल प्रमाणन लागू करने की प्रक्रिया में इसी तरह की समस्याओं था, मैं कोड है कि काम करता है पोस्ट करेंगे है .. पिछले उल्लिखित समस्या: त्रुटि (400) खराब अनुरोध 'अग्रणी' के कारण हो सकता है उपरोक्त कोड में ..

string codeClient = "code="+ t +"&client_id=number.apps.googleusercontent.com&"; 
string secretUri = "client_secret=yoursecret&" + "redirect_uri=path&" 
     + "grant_type=authorization_code"; 
postString = codeClient + secretUri; 

string url = "https://accounts.google.com/o/oauth2/token"; 

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url.ToString()); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 

UTF8Encoding utfenc = new UTF8Encoding(); 
byte[] bytes = utfenc.GetBytes(postString); 
Stream os = null; 
try 
{ 
     request.ContentLength = bytes.Length; 
     os = request.GetRequestStream(); 
     os.Write(bytes, 0, bytes.Length); 
} 
catch 
{ } 

try 
{ 
     HttpWebResponse webResponse = (HttpWebResponse) request.GetResponse(); 
     Stream responseStream = webResponse.GetResponseStream(); 
     StreamReader responseStreamReader = new StreamReader(responseStream); 
     result = responseStreamReader.ReadToEnd();//parse token from result 
+0

कोड के लिए "टी" क्या उपयोग किया जाता है..और इसे कैसे प्राप्त करें .. –

+0

प्रारंभिक प्राधिकरण कोड ... –

+0

यह अभी भी इस कोड के साथ खराब अनुरोध है –

2

मेरा कोड काम कर रहा है, मैंने उपरोक्त दो पंक्तियों में गलतियां की हैं। यह

byte[] buffer = Encoding.ASCII.GetBytes("code=" + code + "&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token"); 

शेष कोड सही होना चाहिए।

+2

आपके कोड में कोड वैरिएबल क्या है .. –

+0

@ विकटर: मुझे आपकी ** ग्राहक आईडी ** और ** ग्राहक रहस्य ** दोनों बफर में शामिल हैं। मेरी होस्ट की गई वेबसाइट में एसएसएल नहीं है। क्या आप जानते हैं कि Google गैर वेब कनेक्शन से मेरा वेब अनुरोध स्वीकार करेगा या नहीं? जाहिर है, यह सुरक्षित नहीं होगा, और कोई मेरे प्रमाण-पत्रों को मिटा सकता है, लेकिन मुझे इसके चारों ओर एक रास्ता नहीं पता है। – jp2code

0

मूल अनुरोध कुछ हद तक पुराना प्रतीत होता है। लेकिन मैंने पाया कि Google के कोड उदाहरणों में बहुत से "सर्वोत्तम अभ्यास" हाउसकीपिंग कोड शामिल हैं जो आवश्यक संचालन से अलग होना मुश्किल है।

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

http://www.tqis.com/eloquency/googlecalendar.htm

0
public string ReceiveTokenGmail(string code, string GoogleWebAppClientID, string GoogleWebAppClientSecret, string RedirectUrl) 
{ 
    string postString = "code=" + code + "&client_id=" + GoogleWebAppClientID + @"&client_secret=" + GoogleWebAppClientSecret + "&redirect_uri=" + RedirectUrl; 

    string url = "https://accounts.google.com/o/oauth2/token"; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString()); 
    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 

    UTF8Encoding utfenc = new UTF8Encoding(); 
    byte[] bytes = utfenc.GetBytes(postString); 
    Stream os = null; 
    try 
    { 
     request.ContentLength = bytes.Length; 
     os = request.GetRequestStream(); 
     os.Write(bytes, 0, bytes.Length); 
    } 
    catch 
    { } 
    string result = ""; 

    HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse(); 
    Stream responseStream = webResponse.GetResponseStream(); 
    StreamReader responseStreamReader = new StreamReader(responseStream); 
    result = responseStreamReader.ReadToEnd(); 

    return result; 
} 
+0

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

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