2016-12-27 11 views
6

यहां टोकन एक्सेस करने और यूट्यूब एपीआई के लिए टोकन रीफ्रेश करने के लिए मेरा काम प्रवाह है। मानकों के साथ इम पैदा प्राधिकरण यूआरएलयूट्यूब ओएथ हर बार जब मैं अनुरोध करता हूं प्राधिकरण विंडो को

access_type = ऑफ़लाइन, response_type = कोड, redirect_uri = uri, प्राधिकरण यूआरएल मैं से गुंजाइश = स्कोप, राज्य = राज्य, client_id = आईडी

प्रमाणीकरण कोड प्राप्त है, तो मैं एक और यूआरएल पैदा करने ACCESS_TOKEN हो और इन मानकों

कोड के साथ प्राधिकरण यूआरएल से कोड का उपयोग कर refresh_token करने के लिए: कोड, client_id: CLIENT_ID, client_secret: cLIENT_SECRET, redirect_uri: serviceCallback, राज्य: state.callback, grant_typ ई: "authorization_code"

जहां तक ​​मुझे पता है कि उपयोगकर्ता को केवल एक बार इस प्रक्रिया को पूरा करना चाहिए और फिर यह स्वचालित होना चाहिए। मेरी समस्या यह है कि मुझे हमेशा प्राधिकरण को पूरा करना होगा और मुझे अनुरोध पर मजबूर किए बिना हमेशा नई पहुंच_टोकन और refresh_token मिल रहा है।

यहाँ कोड हिस्सा है जहाँ मैं प्रमाणीकरण यूआरएल

getAuthUrl: function(scopes, applicationCallback, serviceCallback, siteId, 
selectChannel, websiteUrl) { 
var requestedClientId = CLIENT_ID; 
var scopess = 
    "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/userinfo.email " + 
    scopes.replace(",", " "); 

return "https://accounts.google.com/o/oauth2/auth?" + 
    "access_type=offline" + 
    "&response_type=code" + 
    /*"&approval_prompt=auto" +*/ 
    "&redirect_uri=" + serviceCallback + 
    "&scope=" + scopes + 
    "&state=" + JSON.stringify({ 
    service: NAME, 
    callback: applicationCallback, 
    scopes: scopes, 
    siteId: siteId, 
    selectChannel: selectChannel, 
    websiteUrl: websiteUrl 
    }) + 
    "&client_id=" + requestedClientId; 
    }, 

हो रही वहाँ इम से वापस कोड हो रही है और है कि कोड, clientid और clientSecret पहुंच टोकन प्राप्त और ताज़ा करने के लिए उपयोग कर रहा है टोकन

getAuthTokens: function(code, state, res, serviceCallback) { 
// Google oAuth endpoint 
var endpoint = "https://www.googleapis.com/oauth2/v4/token"; 
const scopes = state.scopes.split(" "); 
// Setup request data 
var data = { 
    code: code, 
    client_id: CLIENT_ID, 
    client_secret: CLIENT_SECRET, 
    redirect_uri: serviceCallback, 
    state: state.callback, 
    grant_type: "authorization_code" 
}; 


request.post(endpoint).send(data).type('form').set('Accept', 
     'application/json').end(function(err, oAuthResponse) {}); 
    }, 

मैं गलत एंडपॉइंट यूआरएल का उपयोग कर रहा था, मैंने इसे यूट्यूब एपीआई दस्तावेज द्वारा प्रदान किए गए एक से अलग में बदल दिया और डेटा वैरिएबल से राज्य पैरामीटर हटा दिया लेकिन फिर भी समस्या को ठीक नहीं करता है

नई endpoint यूआरएल

var endpoint = "https://accounts.google.com/o/oauth2/token"; 

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

मैं किसी भी तरह की मदद के लिए वास्तव में आभारी हूं क्योंकि मुझे लगता है कि मैंने सब कुछ करने की कोशिश की।

+0

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

उत्तर

5

मुद्दा के रूप में आपके पास access token अद्यतन नहीं मैन्युअल refresh token का उपयोग कर कि access token है कि आप प्रयोग कर रहे हैं अगली बार जब आप का उपयोग करने से पहले समाप्त हो गया है है।

यदि आपको access token अपडेट करने के लिए refresh token का उपयोग करने की आवश्यकता है [यदि आपने अंतिम बार टोकन को अपडेट किया है) + (समाप्ति समय)] पहले ही पार हो चुका है।

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

यूट्यूब API दस्तावेज़ प्रक्रिया here

डिफ़ॉल्ट रूप से, समाप्ति समय लगभग 3 सेकंड है दर्शाता है।

यह निश्चित रूप से आपके मामले में काम करेगा।

-1

इस खाते के लिए गूगल के अपने खातों को सेटिंग में जाएं ---> कनेक्ट किए गए एप्लिकेशन और साइटों के लिए जाना ----> एप्लिकेशन प्रबंधित करें: वहाँ आप इस तरह यूट्यूब के लिए अनुमतियों को देख सकते हैं से अधिक: enter image description here

+0

यह इस प्रश्न को हल करने के लिए दूरस्थ रूप से भी प्रयास नहीं करता है। – DaImTo

+0

वैसे यह हो सकता है, क्योंकि यह वह जगह है जहां Google Apps या किसी तृतीय पक्ष ऐप्स के लिए सभी अनुमतियां मौजूद हैं। अगर अनुमति यहां मौजूद नहीं है तो उसे जोड़ना होगा ताकि यह अनुमति मांगने पर दोहराए न रहे। – Anik

+0

यह उन सभी अनुमतियों को जोड़ता है जिन्हें मुझे वहां चाहिए और यह वहां से गायब नहीं होता है – kosas

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