2017-12-11 62 views
10

मैं वर्तमान में इस आलेख में वर्णित के रूप में गूगल एपीआई क्लाइंट प्राधिकरण के लिए वेब घटक के विकास कर रहा हूँ। https://developers.google.com/identity/protocols/CrossClientAuthगूगल क्रॉस क्लाइंट प्राधिकरण और invalid_grant त्रुटियाँ

इसके अतिरिक्त

, वातावरण है कि मैं में हूँ रेल है और इसलिए मैं गूगल-api-ग्राहक मणि इस लेख https://developers.google.com/identity/protocols/OAuth2WebServer#handlingtheresponse

प्राधिकरण कोड वेब का उपयोग कर Android एप्लिकेशन के माध्यम से प्राप्त किया जाता है में वर्णित के रूप उपयोग कर रहा हूँ क्लाइंट आईडी और इसे एक्सचेंज करने के लिए वेब एपीआई पर पारित किया गया। एक्सचेंज के लिए मणि और कोड के अपने प्रयोग के रूप में

auth_client = Google::APIClient::ClientSecrets.load("/path/to/client_secrets.json").to_ 
authorization 
auth_client.code = code 
auth_client.fetch_access_token! 

मैं अतिरिक्त

auth_client = Google::APIClient::ClientSecrets.load("/path/to/client_secrets.json").to_ 
authorization 
auth_client.update!(
    :grant_type => 'authorization_code' 
) 
auth_client.code = code 
auth_client.fetch_access_token! 

सभी मामलों में कर की कोशिश की है इस प्रकार मैं कोई विवरण के साथ गूगल से अवैध अनुदान त्रुटि प्राप्त है।

मैंने बिना किसी सफलता के google oauth playground का उपयोग करके अन्य एपीआई उपकरण जैसे कि कर्ल और पोस्टमैन का लाभ उठाने के लिए यूआरएल बनाने की कोशिश की है और मणि को बाधित कर दिया है।

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

उत्तर

0

ठीक है, शायद वह समाधान नहीं है जिसे आप ढूंढ रहे हैं, लेकिन मैं आवेदन के सामने के अंत में JavaScript login API का उपयोग कर रहा हूं और बैकएंड के माध्यम से बैक को पास कर रहा हूं जो कि मणि अनुरोधों में हार्ड-कोड किया गया है इस उदाहरण:

ga_view_ids = @service.list_account_summaries(options: {header: {authorization: "Bearer #{params[:access_token]}"}}).items 

आशा है कि यह सही दिशा :) में आप पाने में मदद करता

1
{“error”: “invalid_grant”, “error_description”: “Bad Request”} 

आम तौर पर मतलब है कि क्लाइंट ID और सीक्रेट आप एक्सेस का अनुरोध करने के लिए उपयोग कर रहे हैं एक है कि करने के लिए इस्तेमाल किया गया था नहीं है प्रश्न में कोड बनाओ। Android एप्लिकेशन से साख के माध्यम से

प्राधिकरण कोड अनुरोध एक ही क्रेडेंशियल्स का उपयोग अधिकृत किया जाना चाहिए। आप इस तरह से क्रेडेंशियल मिश्रण और मिलान नहीं कर सकते हैं।

मैं सुझाव है कि आप अपने वेब एप्लिकेशन अनुरोध क्रेडेंशियल्स Android एप्लिकेशन ताज़ा टोकन है कि वेब साख बनाई है, तो स्मृति में कार्य करता है का उपयोग करने के लिए सक्षम होना चाहिए है।

+0

मेरी समझ यह है कि प्राधिकरण क्लाइंट को प्राधिकरण कोड का अनुरोध करने के लिए केवल क्लाइंट आईडी की आवश्यकता होती है। यदि ऐसा है तो मैं पुष्टि कर सकता हूं कि उसी क्लाइंट आईडी का उपयोग प्राधिकरण कोड का अनुरोध करने के लिए किया जा रहा है जिसका उपयोग इसे बदलने के लिए किया जा रहा है। – rantingsonrails

+0

आप कहते हैं कि आप एंड्रॉयड tgen में इसे प्राप्त वेब में इसका इस्तेमाल करते हैं तो आप उस वेब ऐसा नहीं कर सकते और एंड्रॉयड दो पूरी तरह से अलग क्लाइंट ID और सीक्रेट अपनी अलग साख – DaImTo

+0

मैं प्रलेखन यहाँ संदर्भित कर रहा हूँ है। https://developers.google.com/identity/protocols/CrossClientAuth#offlineAccess मेरी समझ यह है कि एंड्रॉइड क्लाइंट प्राधिकरण कोड प्राप्त करने के लिए वेब क्लाइंट आईडी को पैरामीटर के रूप में पास करता है। – rantingsonrails

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