我正在使用Google网站上的Apps脚本,我正在尝试使用Oauth对作为活动用户的小工具进行身份验证,以显示活动用户文档列表 . 我发现有几个谷歌小组讨论询问了这个没有答案,希望我能在这里得到答案 . 这是我的代码:
var oauthConfig = UrlFetchApp.addOAuthService(“gDocs”); oauthConfig.setAccessTokenUrl( “https://www.google.com/accounts/OAuthGetAccessToken”); oauthConfig.setRequestTokenUrl( “https://www.google.com/accounts/OAuthGetRequestToken?scope=https://docs.google.com/feeds/”); oauthConfig.setAuthorizationUrl( “https://www.google.com/accounts/OAuthAuthorizeToken”); oauthConfig.setConsumerKey( “myDomainName”); oauthConfig.setConsumerSecret( “myCosumerSeceret”);
var options = {“method”:“GET”,“headers”:{“GData-Version”:“3.0”},“oAuthServiceName”:“gDocs”,“oAuthUseToken”:“always”};
var results = UrlFetchApp.fetch(“https://docs.google.com/feeds/default”,options);
此时代码不会运行,并显示包含小工具的页面:执行该操作需要授权 .
任何帮助将不胜感激 .
谢谢James Krimm
5 回答
无法访问
active user
数据 . 已发布的应用程序脚本(如站点上)在脚本所有者的帐户下运行,名为effective user
. 并且,作为安全问题,脚本所有者无权访问active user
的任何数据 .那么,@ claudio建议(使用内置DocsList)是不可能的 .
Unless 我们谈论的是Google Apps域(而不是常规的消费者帐户),脚本所有者是域管理员 . 在这种情况下,他可以使用Google文档列表数据API来模拟其域中的任何用户 .
无论哪种方式,消费者密钥和秘密应始终是“匿名的”,无论这种情况如何 .
要使用3-legged OAuth执行授权,您必须使用'anonymous'作为ConsumerKey和ConsumerSecret:
另请注意,正确的Feed网址为
https://docs.google.com/feeds/default/private/full
.但是,如果您的目标是获取活动用户的文档列表,为什么不使用Apps脚本提供的DocsList服务?他们还会为您解析结果 .
https://developers.google.com/apps-script/service_docslist
我有一个Google脚本OAuth库https://sites.google.com/site/scriptsexamples/custom-methods/google-oauth,这将使OAuth部分减少痛苦 .
以及当前正在开发的DriveSrevice Library的一些源代码,它们将达到Google Script中缺少的点数 . https://sites.google.com/site/scriptsexamples/custom-methods/driveservice
此特定错误可能与OAuth无关,但与将DocsList添加到应用程序有关 .
见:https://developers.google.com/apps-script/troubleshooting#common_errors
这里的答案是不正确的 . 你可以做你需要的,但不能直接使用Oauth . 而是使用“作为当前用户运行”选项而不是脚本所有者发布Apps脚本 . 然后使用DriveApp的DocsList获取用户文件 . 这里的关键是将服务发布为“以访问应用程序的用户身份运行” .