在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?

Posted

技术标签:

【中文标题】在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?【英文标题】:In chrome extension, how to obtain an access token from a gmail user other than current chrome user? 【发布时间】:2019-04-20 10:17:16 【问题描述】:

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

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

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

从 background.js 中使用时,会出现“gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy”错误

当使用 content.js 中的相同代码时,会出现“gapi undefined”错误。

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

【问题讨论】:

您可以添加任何详细信息,例如:使用的代码,遇到的错误问题吗? How do I ask a good question?, How to create a Minimal, Complete, and Verifiable example 向社区展示您的尝试。还有,授权chrome扩展的是谁,是登录gmail还是chrome用户? 【参考方案1】:

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;

其中 redirectUrihttps://<your extension id>.chromiumapp.org/oauth2,它必须在授权重定向 URI 列表中(在开发者控制台中)。我在这里有点挣扎,因为最初我创建了“chrome 应用程序”凭据并且没有授权的重定向 URI 选项,所以我切换到“网络应用程序”凭据。

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

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

然后运行launchWebAuthFlow:

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

【讨论】:

以上是关于在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome扩展程序后台脚本如何与网页服务工作者进行通信?

从 Chrome 扩展中挂钩 Websocket

如何知道当前环境是chrome扩展中的content.js或background.js

如何从 chrome 扩展中读取文件?

如何使用 chrome.tabs.getCurrent 在 Chrome 扩展程序中获取页面对象?

如何在网页中调用chrome浏览器里的扩展程序