我是 Google Apps for Education 的学习主管和学校管理员。
我将 Google Apps Script 用于许多使用 gas 服务的应用程序(控制缺勤、发送电子邮件、自动报告、ScriptDb 数据库等)。这是梦幻般的。
基本上我需要在学生的 Google Drive 中创建一个文件夹结构(年份、课程、教师等)。
使用 Google Apps 脚本服务,我可以轻松地做到这一点,但文件夹属于创建者(管理员),我认为用户会花费管理员存储配额。我对此不感兴趣。(是的,我可以制作一个由用户执行的应用程序并在其 Google Drive 中创建结构,但我宁愿以自动化方式进行,无需干预)
要在 Google Drive 中创建此文档(和文件夹),用户(教师、学生等)已调整 Waqar Ahmad 在此响应中提供的代码 [将作者添加到电子表格... ]
这使我可以使用 Google Document List API(Google Apps 管理访问权限以模拟域用户)获取其他用户的文档以进行更新,并且还可以在其他 Google Drive 用户上创建文件夹和文件。它完美地工作。我在这里提到:
但是现在,Google Documents List AP 第 3 版已被正式弃用,并鼓励我们使用 Google API Drive。
我尝试对这个新的 Google API 做同样的事情。有没有人设法做到这一点?可能吗?我不知道从哪里开始!
谢谢你。
塞尔吉
更新:
这是我正在工作的代码,但我收到“无效请求”错误:
(...)
var user = e.parameter.TB_email // I get user from a TextBox
//https://developers.google.com/accounts/docs/OAuth2ServiceAccount
//{Base64url encoded header}.{Base64url encoded claim set}.{Base64url encoded signature}
//{Base64url encoded header}
var header = '{"alg":"RS256","typ":"JWT"}'
var header_b64e = Utilities.base64Encode(header)
//{Base64url encoded claim set}
var t_ara = Math.round((new Date().getTime())/1000) // now
var t_fins = t_ara + 3600 // t + 3600 sec
var claim_set = '{"iss":"1111111111-xxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",'+
'"prn":"' + user + '",' +
'"scope":"https://www.googleapis.com/auth/prediction",'+
'"aud":"https://accounts.google.com/o/oauth2/token",'+
'"exp":'+t_fins+','+
'"iat":'+t_ara+'}'
// where '1111111111-xxxxxxxxxxx... is my CLIENT-ID (API Access -> Service Account)
var claim_set_b64e = Utilities.base64Encode(claim_set)
claim_set_b64e = claim_set_b64e.replace(/=/g,'')
var to_sign = header_b64e + '.' + claim_set_b64e
// [signature bytes] ??? // password 'isnotasecret???'
var key_secret = DocsList.getFileById('0Biiiiiiiiii-XXXXXXXXXXX').getBlob().getBytes()
// where '0Biiiiiiiiii-XXXXXXXXXXX'... is my p12 file (key_secret) uploaded to GDRive
// I don't know if this is correct !!!
var sign = Utilities.base64Encode(Utilities.computeHmacSha256Signature(to_sign, key_secret))
var JWT_signed = to_sign + '.' + sign
JWT_signed = JWT_signed.replace(/=/g,'')
// Token Request /////////////////////////////////////////////////////////////
var url = 'https://accounts.google.com/o/oauth2/token'
//var url = 'https%3A%2F%2Faccounts.google.com%2Fo%2Foauth2%2Ftoken' ???
//var url = 'https:' + '%2F%2Faccounts.google.com%2Fo%2Foauth2%2Ftoken' ???
var parameters = {
"method" : "POST",
"payload" : '"' + 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=' + JWT_signed + '"',
"contentType" : "application/x-www-form-urlencoded"
}
var content = UrlFetchApp.fetch(url,parameters) //.getContentText()
// Token Request end ////////////////////////////////////////////////////////
我得到一个“无效请求”而不是带有令牌的 JSON
前两个部分(标题和声明集)都可以。结果与 Google OAuth 页面的结果相同。
我不知道签名部分是否正确,或者错误是否在令牌请求中。