gpt4 book ai didi

google-apps-script - 是否可以使用 Google Apps 脚本通过 Google Drive API 模拟域的用户?

转载 作者:行者123 更新时间:2023-12-04 23:16:25 26 4
gpt4 key购买 nike

我是 Google Apps for Education 的研究主管和学校管理员。

我将 Google Apps Script 用于许多使用 gas 服务的应用程序(控制缺勤、发送电子邮件、自动报告、ScriptDb 数据库等)。这是梦幻般的。

基本上,我需要在学生的 Google Drive 中创建一个文件夹结构(年份、类(class)、教师等)。

使用 Google Apps 脚本服务,我可以轻松完成,但文件夹属于创建者(管理员),我认为用户会花费管理员存储配额。这对我不感兴趣。
(是的,我可以制作一个由用户执行的应用程序并在其 Google Drive 中创建结构,但我更愿意以自动化的方式进行,无需干预)

为了在 Google Drive 中创建此文档(和文件夹),用户(教师、学生……)已经修改了 Waqar Ahmad 在此回复中提供的代码 [Add an writer to a spreadsheet ... ]

这使我可以使用 Google 文档列表 API(Google Apps 管理访问权限来模拟域用户)获取其他用户的文档以进行更新,并且还适应了在其他 Google Drive 用户上创建文件夹和文件。它完美地工作。我在这里提到:

How to add a Google Drive folder ...

但是现在,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 ////////////////////////////////////////////////////////

我得到一个“无效请求”而不是带有 token 的 JSON

第 2 个部分(标题和声明集)没问题。结果等于 Google OAuth 页面的结果。

我不知道签名部分是否正确,或者错误是否在 token 请求中。

最佳答案

上面示例的问题在于它使用 hmacsha256 计算签名。您需要使用 rsasha256。现在有两个用于应用程序脚本的服务帐户库。我放在一起的一个是:
https://gist.github.com/Spencer-Easton/f8dad65932bff4c9efc1

这两个库的问题是它们源自 jsrsa,它在服务器端运行速度非常慢。

关于google-apps-script - 是否可以使用 Google Apps 脚本通过 Google Drive API 模拟域的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com