首页 > 解决方案 > 在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?

问题描述

我创建了一个可在 mail.google.com 页面上使用的 chrome 扩展程序,并使用 gapi 来管理电子邮件,如果 chrome 用户与 gmail 用户不匹配,则效果不佳。

原因是我从 chrome.identity.getAuthToken 获得了一个 access_token,它为我提供了一个 chrome 当前用户,但不是一个 gmail 用户。

我尝试在我的扩展程序中使用 gapi.auth2 来获取 gmail 用户访问令牌,但没有运气:

有没有办法从当前的 gmail 用户而不是 chrome 用户那里获取 access_token?

标签: google-chrome-extensiongoogle-oauthgmail-api

解决方案


chrome.identity.launchWebAuthFlow 为我工作。

创建 oauth2 网址:

var url = 'https://accounts.google.com/o/oauth2/auth' +
        '?client_id=' + clientId +
        '&response_type=token' + 
        '&redirect_uri=' + redirectUri +
        '&login_hint=' + email +
        '&scope=' + scopes;

redirectUri在哪里https://<your extension id>.chromiumapp.org/oauth2,它必须在授权重定向 URI 列表中(在开发人员控制台中)。我在这里有点挣扎,因为最初我创建了“chrome app”凭据并且没有授权的重定向 URI 选项,所以我切换到“web app”凭据。

email是当前用户的电子邮件。如果用户已经授予权限,则指定电子邮件有助于省略对话。

clientId范围需要手动指定,它们不会从清单中自动获取。

然后运行launchWebAuthFlow:

 chrome.identity.launchWebAuthFlow({
     'url': url,
     'interactive': true
    }, function (redirectedTo) {
       // check errors and get token from redirect url
 });

推荐阅读