3

我正在編寫Chrome擴展,並一直試圖使用chrome.identity.launchWebAuthFlow向Google進行身份驗證。我更喜歡chrome.identity.getAuthToken(它可以工作),因爲getAuthToken獲取當前登錄到Chrome的用戶的令牌 - 可能會登錄到多個Google帳戶。我希望用戶能夠將特定的Google日曆連接到我的擴展程序,並且該日曆可能屬於與他們登錄Chrome時不同的用戶。可以使用chrome.identity.launchWebAuthFlow對Google API進行身份驗證嗎?

所以,我一直試圖做到這一點與chrome.identity.launchWebAuthFlow和通常失敗的redirect_uri不匹配。我已經嘗試了幾乎所有可以在Google API開發人員控制檯中設置的憑據類型。 (「Chrome應用程序」似乎是正確的,但我也嘗試過Web應用程序,其他和iOS)。我嘗試過使用chrome.extension.getURL('string')和chrome.app.getRedirectURL ('string')作爲我的redirect_uri。

我試用了https://stackoverflow.com/questions/40384255/oauth2-angular-chrome-extension中提到的示例應用程序,但無法使其工作。

我有一個懷疑,我正在嘗試做一些事情,要麼以前被允許,不再是或者從來沒有工作過。

這裏是我的代碼的例子,但我想我的問題是真正的API,開發者控制檯 - 我不明白的方式來建立一個配置,將延期工作:

var auth_url = 'https://accounts.google.com/o/oauth2/v2/auth'; 
    var client_key = *[client id from API dev console]* 
    var auth_params = { 
         client_id: client_key, 
         redirect_uri: chrome.identity.getRedirectURL("oauth2.html") 
         scope: 'https://www.googleapis.com/auth/calendar' 
         }; 
    auth_url += '?' + $.param(auth_params); 

    chrome.identity.launchWebAuthFlow({url: auth_url, interactive: true}, function(token) { console.log(token); }); 

(我也曾嘗試https://accounts.google.com/o/oauth2/auth端點。)

解決方案:

閱讀接受的答案後,我結束了與此:

var auth_url = 'https://accounts.google.com/o/oauth2/auth'; 
var client_id = '[client ID from console]'; 
var redirect_url = chrome.identity.getRedirectURL("oauth2.html"); 
var auth_params = { 
    client_id: client_id, 
    redirect_uri: redirect_url, 
    response_type: 'token', 
    scope: 'profile' 
}; 
auth_url += '?' + $.param(auth_params); 
console.log(auth_url); 
chrome.identity.launchWebAuthFlow({url: auth_url, interactive: true}, function(responseUrl) { console.log(responseUrl); }); 

responseUrl是我的帶參數的redirect_uri - 所以Google oauth返回的是,而不是將瀏覽器重定向到它 - 我可以從那裏繼續。

+0

請將該問題置於主題上:包括一個**完整的** [mcve],可以複製問題。通常包括一個* manifest.json *,一些背景*和*內容腳本。尋求調試幫助的問題(「**爲什麼不是這個代碼工作?」)必須包括:►期望的行爲,►特定問題或錯誤*和*►在問題中重現問題所需的最短代碼**本身**。沒有明確問題陳述的問題對其他讀者無益。請參閱:「**如何創建[mcve] **」,[我可以在此處詢問哪些主題?](http://stackoverflow.com/help/on-topic)和[問]。 – Makyen

+0

這種方法仍然適合你嗎? – seesoe

回答

0

要獲得Angular sample運行,我需要:

  1. 與建立在谷歌開發者控制檯我自己的Web應用程序客戶端ID授權重定向https://bcgajjfnjjgadphgiodlifoaclnemcbk.chromiumapp.org/oauth2

  2. 複製客戶端ID的URI成示例的config.json文件。

的呼叫樣品中獲得redirectURI就像是chrome.identity.getRedirectURL("oauth2"),字符串參數被追加到基於擴展ID的URL的結尾。

+0

我會盡力看看我能否做出這項工作並儘快接受您的答案。我至少已設法輸入您在Google開發者控制檯中指定格式的授權重定向URI。 我最終以不同的方式構建我的應用 - 擴展只與「我們的」服務器直接通信,「我們」的服務器代表用戶通過oauth2使用Google API。無論如何,我們都需要服務器到服務器的通信。 –

+0

謝謝!我還沒有回到角度樣本,但你的提示幫助我克服了這個難題。 (可能Google也更新了他們的chrome.identity文檔,因爲現在很清楚,它不會像我幾個月前所想的那樣)。除了開發者控制檯問題之外,我還需要爲auth網址添加一個「response_type」參數。 當使用chrome.identity.getRedirectURL('whatever')URL作爲redirect_uri時,您傳遞給啓動WebAuthFlow的回調獲取帶查詢參數的redirect_uri作爲其單個參數。 –

相關問題