我正在編寫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返回的是,而不是將瀏覽器重定向到它 - 我可以從那裏繼續。
請將該問題置於主題上:包括一個**完整的** [mcve],可以複製問題。通常包括一個* manifest.json *,一些背景*和*內容腳本。尋求調試幫助的問題(「**爲什麼不是這個代碼工作?」)必須包括:►期望的行爲,►特定問題或錯誤*和*►在問題中重現問題所需的最短代碼**本身**。沒有明確問題陳述的問題對其他讀者無益。請參閱:「**如何創建[mcve] **」,[我可以在此處詢問哪些主題?](http://stackoverflow.com/help/on-topic)和[問]。 – Makyen
這種方法仍然適合你嗎? – seesoe