【发布时间】:2017-05-05 22:35:20
【问题描述】:
我对开发 chrome 扩展相当陌生,尤其是 chrome 扩展中的用户身份验证部分。我正在关注 Google Developer 文档中的 User Identity 示例。
该示例运行良好。我能够为 chrome 应用程序生成客户端 ID,在我的情况下为 Gmail API 添加 API 的范围。最后通过在manifest.json 中添加identitypermission 来获得Auth Token,如下所示
"oauth2": {
"client_id": "MY CLIENT ID",
"scopes": [
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/gmail.modify"
]
}
我的 app.js 是一个 content_script,它具有以下代码。
chrome.identity.getAuthToken({ 'interactive': true }, function(token) {
/* With which I can use xhr requests to get data from Gmail API */
console.log('Access Token : '+token);
});
现在,我得到的这个令牌给了我登录 chrome 的用户的结果。含义假设我有一个电子邮件地址为 user_a@gmail.com 的 UserA,并且我已将此日志用于 chrome 浏览器。
问题
如何获取关联账户或二级账户?例如,假设一个用户博客从 chrome 浏览器进入 Gmail。是否可以访问当前登录的特定用户的 Gmail API?
我在这里尝试了几件事。
gapi.auth.authorize({
'client_id': CLIENT_ID,
'scope': SCOPES.join(' '),
'immediate': true
},
function(authResult){//do something});
在上述场景中,客户端 ID 和范围是使用 chrome.runtime.getManifest(); 从 manifest.json 获取的。
- 此方法使用来自google api 的client.js 并利用gapi 变量。
- 在这种情况下,我获得了生成客户端 ID 的用户的访问令牌,甚至没有 chrome 应用程序用户。
- 此外,当我打开隐身模式并访问此插件时,我仍然获得相同用户的访问令牌。
补充说明
我使用 Web OAuth 2 客户端 ID 尝试了相同的 gapi.auth.authorize()。它工作得很好。我的意思是每当执行此授权时,它都会获取当前登录用户的数据,或者它要求用户登录并进行身份验证。如何在 chrome 扩展中实现相同的功能?如果我在这里遗漏了什么,请告诉我。
【问题讨论】:
-
我自己一直在尝试寻找答案。这里缺乏帮助令人沮丧。查看documentation,看起来您可以指定帐户ID,但问题是如何获取该帐户ID。有getAccounts Method,但它在开发频道中,所以没有多大帮助。 :(
-
我一直在拼命地寻找答案。我尝试了很多很多方法。 launchWebAuthFlow()、gapi、chrome.identity、xhr 请求等。NOTHING 已成功。文档很糟糕,互联网上严重缺乏这方面的信息。如果有人对此有任何信息,PRETTY PRETTY PLEASE 分享!!!
-
@Morfie:到目前为止运气好吗?我也为此开了一个赏金。让我们看看能不能得到一些指点。
-
其实是的。让我发布一些更新。我现在不能这样做(正在修复某些东西,但我会添加提醒以更新它。)
标签: javascript google-chrome-extension oauth