我有几个关键的Google Apps脚本是"容器绑定"在Google表格电子表格中。他们拨打Google Admin SDK,Directory API和其他一些Google API,例如URL Shortener API。
我最初通过谷歌搜索和搜索Stack Overflow工作,直到我发现代码完成了我需要的工作。
他们现在工作正常,但在过去的一个月里,我一直在接收来自Google的电子邮件,其中OAuth 1.0已被弃用,使用它的任何内容都应在2015年4月20日之前迁移到OAuth 2.0。
我阅读了他们的官方文档和迁移指南,但仍然非常困惑。他们的所有文档似乎都是针对"应用程序"我找不到任何特定于Google Apps脚本和Javascript的内容。
以下是我使用的Google Apps脚本的示例。它需要一个电子邮件地址作为输入并返回用户的全名。
var consumerKey = "domain.com";
var consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
var publicApiAccessKey = 'xxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxx';
function getUsersName(email) {
var name = '';
try {
var url = 'https://www.googleapis.com/admin/directory/v1/users/' + email + '?key=' + publicApiAccessKey;
var scope = "https://www.googleapis.com/auth/admin.directory.user.readonly";
var fetchArgs = googleOAuth_("Users",scope);
fetchArgs.method = "GET";
fetchArgs.muteHttpExceptions=true;
var userJson = UrlFetchApp.fetch(url, fetchArgs);
var userObject = JSON.parse(userJson);
name = userObject.name.fullName;
} catch(e) {
// send failure email
}
return name;
}
function googleOAuth_(name,scope) {
var oAuthConfig = UrlFetchApp.addOAuthService(name);
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=" + scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey(consumerKey);
oAuthConfig.setConsumerSecret(consumerSecret);
return {oAuthServiceName:name, oAuthUseToken:'always'};
}
当我运行它时,我会收到这些警告提示,确认我的Google Apps脚本使用的代码已被弃用且应予以替换:
以下是Google发出的通知客户已弃用服务的电子邮件文本:
提醒ClientLogin,OAuth 1.0,AuthSub和OpenID 2.0关闭 您好管理员,
在过去几年中,我们宣布了ClientLogin,OAuth 1.0 (3LO),AuthSub和OpenID 2.0已弃用,将关闭 2015年4月20日。谷歌正在逐步摆脱这些旧协议 为了集中支持最新的互联网标准OAuth 2.0 和OpenID Connect。
分析我们的日志会让我们相信您的域名 domain.com运行一个或多个仍然使用一个的应用程序 这些已弃用的协议。你需要确保你的 应用程序使用我们支持的身份验证方法:OAuth 2.0 for API授权或OpenID Connect用于联合身份验证。该 迁移到这些新标准的最简单方法是使用Google 登录SDK(请参阅迁移文档)。 Google登录是 建立在我们的OAuth 2.0和OpenID Connect基础架构之上 为身份验证和授权流程提供单一界面 在Web,Android和iOS上。
如果之前没有完成这些应用程序的迁移 截止日期,应用程序将遇到其中断的能力 连接到谷歌(可能包括登录的能力)直到 发生迁移到支持的身份验证协议。避免 任何服务中断,您都需要进行迁移 在关闭日期之前。
如果您需要迁移与Google的集成:
从OpenID 2.0迁移到Google登录(OpenID Connect)。迁移 来自OAuth 1.0 to OAuth 2.0。对于AuthSub和ClientLogin,没有 迁移支持。您需要重新开始使用OAuth 2.0和用户 需要重新同意。如果您有任何技术问题 迁移您的应用程序,请将问题发布到Stack Overflow 在标签google-oauth或google-openid下。请记住这一点 Stack Overflow是一个可公开查看的论坛。我们的工程师将是 定期通知任何已发布的问题。
我阅读了Migrating from OAuth 1.0 to OAuth 2.0部分,但我仍然不知道我应该做些什么。我需要具体了解我需要在上面的代码中进行更改,以便我的脚本在4月20日(下周一)之后继续工作。
答案 0 :(得分:2)
转换它需要两个步骤:
1)您需要在脚本中添加Oauth2 Web流。您可以通过以下方式获得谷歌开发的库: https://github.com/googlesamples/apps-script-oauth2
查看此仓库中的README.MD,了解如何设置它。
2)更改您的电话以使用Oauth2令牌:
function getUsersName(email) {
var token = oauth2Service().getAccessToken(); //this will be setup from step 1
var name = '';
try {
var url = 'https://www.googleapis.com/admin/directory/v1/users/' + email;
var parameters = { method : 'get',
headers : {'Authorization': 'Bearer '+ token},
contentType:'application/json',
muteHttpExceptions:true};
var userJson = UrlFetchApp.fetch(url, parameters);
var userObject = JSON.parse(userJson);
name = userObject.name.fullName;
} catch(e) {
// send failure email
}
return name;
}