Можно ли использовать chrome.identity.launchWebAuthFlow для аутентификации в API Google?
Я пишу расширение для Chrome и пытаюсь использовать chrome.identity.launchWebAuthFlow для аутентификации в Google. Я бы предпочел это chrome.identity.getAuthToken (который работает), потому что getAuthToken получает токен для пользователя, в настоящий момент вошедшего в Chrome - который может войти в несколько учетных записей Google. Я хочу, чтобы пользователь мог подключить определенный календарь Google к моему расширению, и этот календарь может принадлежать другому пользователю, нежели он вошел в Chrome как.
Итак, я пытался сделать это с помощью chrome.identity.launchWebAuthFlow и, как правило, терпел неудачу вокруг несоответствующего redirect_uri. Я попробовал почти все типы учетных данных, которые вы можете настроить в консоли разработчика API Google. («Приложение Chrome» казалось правильным, но я также попробовал веб-приложение, Другое и iOS.) Я попытался использовать результаты как chrome.extension.getURL ('string'), так и chrome.app.getRedirectURL ('строка') как мой 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://accoun,ts.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 вернул его вместо перенаправления браузера на него - и я мог бы продолжить с этого.