在 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;
其中 redirectUri 是 https://<your extension id>.chromiumapp.org/oauth2
,它必须在授权重定向 URI 列表中(在开发者控制台中)。我在这里有点挣扎,因为最初我创建了“chrome 应用程序”凭据并且没有授权的重定向 URI 选项,所以我切换到“网络应用程序”凭据。
电子邮件 是当前用户的电子邮件。如果用户已经授予权限,则指定电子邮件有助于省略对话框。
clientId 和 scopes 需要手动指定,它们不会自动从清单中获取。
然后运行launchWebAuthFlow:
chrome.identity.launchWebAuthFlow(
'url': url,
'interactive': true
, function (redirectedTo)
// check errors and get token from redirect url
);
【讨论】:
以上是关于在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道当前环境是chrome扩展中的content.js或background.js