2015-03-01 12 views
6

मैं एक्सेस टोकन के लिए एक बार Google प्लस प्राधिकरण कोड का आदान-प्रदान करने की कोशिश कर रहा हूं। लेकिन मुझे 400 खराब अनुरोध मिल रहा है। मैं वीबी.नेट का उपयोग कर रहा हूं।Google एपीआई टोकन एंडपॉइंट POST रिटर्न खराब अनुरोध 400

 'We should now have a "good" one-time authorization code stored in "code" 
    Using Client As New WebClient() 
     'Dim Client As New WebClient() 
     Dim values As New NameValueCollection() 
     Dim Resp 
     Dim responseString As String 

     values("code") = Request.QueryString("code") 
     values("client_id") = ConfigurationManager.AppSettings("google.clientid") 
     values("client_secret") = ConfigurationManager.AppSettings("google.clientsecret") 
     values("grant_type") = "authorization_code" 
     values("redirect_uri") = "http://localhost:3333/MyVacations/default.aspx" 
     Resp = Client.UploadValues("https://www.googleapis.com/oauth2/v3/token", values) 
     responseString = Encoding.Default.GetString(Resp) 
    End Using 

मैं बहुत यकीन है कि यह अंत बिंदु मैं https://www.googleapis.com/oauth2/v3/token लेकिन कौन जानता है का उपयोग करते हुए होना चाहिए कर रहा हूँ है हूँ: यहाँ कोड है? Google Discovery Document बस मेरे लिए यह हलचल करता है।

मेरे नाइवेट को क्षमा करें, लेकिन क्या कोई यह बताएगा कि Google के उदाहरण के रूप में POST कोड का उपयोग कैसे किया गया है, ऊपर दिए गए मेरे कोड में वेब अनुरोध से संबंधित है? मुझे लगता है कि मैं समझता हूं कि मान कैसे अनुवाद करते हैं, लेकिन पोस्ट (नीचे) में 3 हेडर लाइनें ... यह वीबी कोड में कैसे निर्दिष्ट होता है? मुझे ऐसा कुछ याद आ रहा है जो दूसरों के लिए वास्तव में स्पष्ट होना चाहिए ताकि यदि आप जानते हैं, तो कृपया मुझे बताएं।

POST /oauth2/v3/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& 
client_id=8819981768.apps.googleusercontent.com& 
client_secret={client_secret}& 
redirect_uri=https://oauth2-login-demo.appspot.com/code& 
grant_type=authorization_code 

एक और Stack Overflow Post कहते क्वेरी पैरामीटर के रूप में डेटा भेजने के बारे में कुछ (का उपयोग करते हुए '&' मुझे लगता है कि) के बजाय अनुरोध हेडर के रूप में डाटा भेजने, इसलिए वहाँ कुछ एक NameValueCollection साथ भेजने के साथ गलत क्या है?

+0

क्या आपका redirect_uri प्राधिकरण कोड प्राप्त करने के लिए उपयोग किए गए मान से मेल खाता है? –

+0

POST द्वारा लौटाई गई प्रतिक्रिया के अनुसार, मुझे एक uri_redirect_mismatch मिलता है, इसलिए आप सही हैं। लेकिन मैंने यूआरएल को सीधे मेरे कोड में डेवलपर कंसोल से कॉपी और पेस्ट किया है और इसके विपरीत मुझे यह नुकसान हुआ है कि यह क्यों हो रहा है। –

उत्तर

4

तो यहां जवाब है: API को 2 कॉल की आवश्यकता है। पहला कॉल एक बार प्राधिकरण कोड देता है। पहले कॉल को रीडायरेक्ट यूआरआई निर्दिष्ट करना होगा।

दूसरा कॉल प्राधिकरण टोकन के लिए एपीआई को एक बार कोड भेजता है। इस पोस्ट को एक यूआरआई रीडायरेक्ट की भी आवश्यकता है।

पहली कॉल में रीडायरेक्ट यूआरआई दूसरे कॉल में रीडायरेक्ट यूआरआई जैसा ही होना चाहिए !!!

मैं इसे दस्तावेज़ में कहीं भी नहीं ढूंढ पाया। याद रखें कि इस यूआरआई को आपके डेवलपर्स कंसोल की सूची में यूआरआई में से एक से मेल खाना चाहिए, जो कि सभी दस्तावेज कहता है।

+0

हाँ, अगर उन्होंने दस्तावेज़ों में उल्लेख किया तो अच्छा होगा। इसे पोस्ट करने के लिए धन्यवाद ... –

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