我正在使用GAS_Service_Account library。如何使用服務帳戶Oauth令牌在appscript中進行REST調用
我能夠完成所有的.p12
密鑰解碼。但現在我有:
myJwt.generateJWT().requestToken();
var token=myJwt.getToken();
現在我想知道用它來製作與 服務帳戶的API調用的API像驅動獲取特定用戶的文件的簡單方法。
我正在使用GAS_Service_Account library。如何使用服務帳戶Oauth令牌在appscript中進行REST調用
我能夠完成所有的.p12
密鑰解碼。但現在我有:
myJwt.generateJWT().requestToken();
var token=myJwt.getToken();
現在我想知道用它來製作與 服務帳戶的API調用的API像驅動獲取特定用戶的文件的簡單方法。
服務帳戶是強大的工具。 GersonLobos提到的圖書館是:MJ5317VIFJyKpi9HCkXOfS0MLm9v2IJHf
讓我們回到一些背景。看到這個視頻如何設置在您的域名服務帳戶上半年:現在
// If userEmail is null the service account's token is returned
function tokenService(userEmail){
var userEmail = userEmail || ""
var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));
var privateKey = jsonKey.private_key;
var serviceAccountEmail = jsonKey.client_email;
if(!userEmail){userEmail = serviceAccountEmail};
var sa = GSApp.init(privateKey, ['https://www.googleapis.com/auth/drive'], serviceAccountEmail).addUser(userEmail);
var tokenObj = JSON.parse(PropertiesService.getScriptProperties().getProperty(userEmail)) || {};
return function(){
var nowTime = parseInt((Date.now()/1000).toString().substr(0,10));
if(!("token" in tokenObj) || tokenObj.expire < nowTime){
var newToken = sa.requestToken().getToken(userEmail);
PropertiesService.getScriptProperties().setProperty(userEmail, JSON.stringify(newToken));
tokenObj.token = newToken.token;
tokenObj.expire = newToken.expire;
}
return tokenObj.token;
}
}
好: https://www.youtube.com/watch?v=EDmEzZEGSts
在項目中啓用的庫中,可以生成以下令牌你有你的代幣。我甚至展示瞭如何緩存它,因爲請求需要幾秒鐘。現在你可以打幾個電話。根據Gerson的要求,這裏有一些驅動器電話:
function transferFileToUser(fileId, transferToEmail, token){
var url = "https://www.googleapis.com/drive/v2/files/"+fileId+"/permissions?sendNotificationEmails=false";
var payload = {"role":"owner","value":transferToEmail,"type":"user"};
var params ={method:"POST",
contentType:'application/json',
headers:{Authorization: "Bearer " + token},
payload:JSON.stringify(payload),
muteHttpExceptions:true
};
var results = UrlFetchApp.fetch(url, params);
return JSON.parse(results.getContentText());
}
function getAllFolders(token){
var query = "mimeType = 'application/vnd.google-apps.folder'";
return driveList(query, token);
}
function getFilesInFolder(folderId, token){
var query = "'"+folderId+"' in parents and mimeType != 'application/vnd.google-apps.folder'";
return driveList(query, token);
}
// genereic call to drive just pass the query
function driveList(query, token){
var filesArray = [];
var pageToken = "";
var query = encodeURIComponent(query);
var params = {method:"GET",
contentType:'application/json',
headers:{Authorization:"Bearer "+token},
muteHttpExceptions:true
};
var url = "https://www.googleapis.com/drive/v2/files?q="+query;
do{
var results = UrlFetchApp.fetch(url,params);
if(results.getResponseCode() != 200){
Logger.log(results);
break;
}
var files = JSON.parse(results.getContentText());
url = "https://www.googleapis.com/drive/v2/files?q="+query;
for(var i in files.items){
filesArray.push({"name":files.items[i].title, "id":files.items[i].id})
}
pageToken = files.nextPageToken;
url += "&pageToken="+encodeURIComponent(pageToken);
}while(pageToken != undefined)
var filesObj = {};
filesObj["fileObjs"] = filesArray;
return filesObj;
}
斯賓塞你好。我試圖重複使用,但現在我看起來像是新版本。所以現在它不需要rsakey?它會使用json鍵嗎?我發現新版本只有一個init函數,可以指導我使用新版本。謝謝!! – GersonLobos
查看下面鏈接的回購示例。它使用我寫的新GSApp服務。它取代了本例中使用的GSA庫。 https://github.com/Spencer-Easton/Apps-Script-Drive-Service-Account-Library –
因此,您有一個服務帳戶,並且您將爲每個用戶將單獨的文件存儲到您的服務帳戶中? –