如何使用Appscript向Google APIs授权OAuth 2.0?

7
我正在玩AppScript并试图获取oAuth 2.0访问令牌。
有没有样例可以在AppScript中实现这个功能?
3个回答

22

我正在制作一个更简洁易懂的教程版本,但是这里有一个简单的Gist,可以为您提供一些示例代码,让您了解如何运作 -

https://gist.github.com/4079885

它仍然缺少注销、错误处理和refresh_token功能,但至少您应该能够登录并调用oAuth 2受保护的Google API(在本例中是个人资料API)。

您可以在此处看到它的实际效果 -

https://script.google.com/macros/s/AKfycby3gHf7vlIsfOOa9C27z9kVE79DybcuJHtEnNZqT5G8LumszQG3/exec

使用oAuth 2 Web服务器流程是关键。查看代码片段中的getAndStoreAccessToken函数以获取关键细节。
我希望在接下来的几周内发布这篇文章,但希望此时此刻可以帮到你。
更新-添加有关redirect_uri的信息
客户端密钥与授权代码返回的特定重定向URI相关联。
您需要在https://code.google.com/apis/console/上设置它。

Redirect URI

需要突出显示的URI需要与已发布的URI匹配(以 /exec 结尾)。您可以从脚本编辑器中的“发布”->“部署为Web应用程序”下获取已发布的URI。确保在进行更改时保存新版本并发布新版本(已发布的URI保持不变)。

Published URI


嗨,Arun,我已经测试了你的示例,看起来很不错。但是我遇到了一个无效的redirect_uri错误。有什么提示吗? - Volkmar Binder
1
我更新了我的答案,包括确保你的 redirect_uri 与你的密钥匹配的信息。希望能帮到你。 - Arun Nagarajan
嗨,Arun,感谢这个很棒的示例。我已经让它运行起来了,认为我可以从这里开始。 - Volkmar Binder
@ArunNagarajan,我在想我们是否会看到这个问题得到解决 https://code.google.com/p/google-apps-script-issues/issues/detail?id=2580 - Edo
我复制粘贴了你的gist,但是当我点击“点击此处开始”时,出现了“401. That's an error. Error: invalid_client no application name”的错误。使用你的链接可以正常工作。有什么想法吗? - lalibi
@lalibi 抱歉回复晚了。但是,您在用户同意屏幕中缺少应用程序名称。 - Nevermore

2

我修改了上面的示例,使用了新的状态令牌API和CacheService,而不是现在已经过时的UserProperties。使用状态令牌API似乎使事情更加安全,因为回调URL将在超时后停止接受状态令牌。

同样的注意事项适用。您的重定向URI必须添加到(脚本)项目中的开发者控制台中,同时您必须从控制台中提取CLIENT_SECRET和CLIENT_ID并将它们粘贴进去。如果您正在一个域内工作,ScriptApp.getService().getUrl()返回的URL似乎不能保证是什么,所以我最终让它动态获取地址,然后等待在第二个重定向上失败,然后硬编码结果URI。

https://gist.github.com/mclaughta/2f4af6f14d6aeadb7611


0
请注意,您可以使用这个新API构建一个OAuth2流程,但它还不是一个完整的样例: https://developers.google.com/apps-script/reference/script/script-app#newStateToken() 特别是,您不应该直接将“state”传递给/usercallback URL,因为OAuth2服务提供商负责往返“state”参数。(相反,您需要将“state”传递给auth URL,然后服务提供商会自动将其附加到回调URL上。)

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