oAuth 2.0的Chrome扩展示例

10

7
网络的规模远远超出谷歌搜索结果所能涵盖的范围。有经验的人可能会指出通过查询无法找到的黄金结果。 - Dmitry Sadakov
2
我很高兴你问了这个问题,并点赞了。另外,那是一个深奥的句子 :D - “批量,说真的,互联网比谷歌的第一条搜索结果还要大。” - Dheeraj Bhaskar
1
@cDima 在搜索有关从扩展程序进行oauth2调用的信息时,我又回到了这个页面(来自谷歌搜索结果)。我完全忘记了我说过什么,1.我感觉自己像个白痴,2.我应该向你道歉。我不想找借口,所以我只想清楚地说,你并不应该受到我的评论,我为此感到非常抱歉。 - Dan Smith
1
@bulk 一切都好,我的朋友 ;) - Dmitry Sadakov
4个回答

16
我已经写了一个示例,演示如何将任何OAuth2系统集成到Chrome扩展中。我的扩展使用AngularJS作为框架,但是如果您遵循相同的模式,您也可以使用普通的JavaScript或其他框架。
关键是使用chrome.identity.launchWebAuthFlow()方法。
我的示例实际上配置为使用Google,但这仅仅是因为它很方便。您可以使用自己的OAuth2提供程序,就像我在公司中所做的那样。重要的区别是,launchWebAuthFlow()不需要浏览器像chrome.identity.getAuthToken()方法那样登录到Google,并且您可以将其与非Google OAuth2系统一起使用。

嘿,Michael,你在之前的令牌过期后如何获取新的令牌? - Ivor
此授权类型不允许使用刷新令牌。一旦会话/令牌过期,您需要重新对用户进行身份验证。允许将刷新令牌提供给在浏览器中运行的代码将打开许多安全漏洞。 - Michael Oryl
最好使用getAuthToken()而不是launchWebAuthFlow(),因为我需要用户使用他们的内部G Suite帐户登录,并且使用前者,如果他们在扩展中授权的帐户上已经登录Chrome,则可以通过再次调用它来获取新的令牌 - 这也很糟糕,但我想不到其他方法来获得刷新令牌。 - Ivor
Michael,你可以使用launchWebAuthFlow()来获取新的令牌,具体请参考我的回答:https://dev59.com/Lqzla4cB1Zd3GeqPD-Q1#51385987 - Ivor
1
@MichaelOryl 我正在使用chrome.identity.launchWebAuthFlow(),但我的扩展程序尚未发布,因此我无法获得回调。我查看了文档,但没有找到任何关于本地环境的内容。 - Chameron

3

3
该方法要求用户在Chrome中登录。 - AshClarke
3
我点了问题的赞同,但反对回答:你在回答中使用的链接是一个实际的教程,里面有代码示例等等。而你的回答简单地指向一些API调用,并且文档十分稀少。你自己的问题是:“是否有一篇教程可以在Chrome扩展中实现oAuth 2.0?”而这个回答并没有提供一个教程。 - abbood
同意 @abbood - Sudhir Kaushik

3

我个人认为Chrome身份验证API很难使用。也许是因为文档写得不好,或者Google只对针对自己的服务进行身份验证方面比较直接。

我找到了一个旧的库,它可以很好地完成大部分OAuth工作和所需的注入。我进行了一些清理并扩展了API。您可以在这里找到它:https://github.com/whoisjuan/ChromeAuth2


2

在这个时候,您可能需要在manifest.json中添加"https://www.googleapis.com/auth/contacts"

....
"oauth2": {
    "client_id": "[Your Client Id]",
    "scopes": ["https://www.googleapis.com/auth/contacts"]
  }
....

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接