2015-04-23 64 views
1

我正在使用GAS_Service_Account library如何使用服務帳戶Oauth令牌在appscript中進行REST調用

我能夠完成所有的.p12密鑰解碼。但現在我有:

myJwt.generateJWT().requestToken(); 
var token=myJwt.getToken(); 

現在我想知道用它來製作與 服務帳戶的API調用的API像驅動獲取特定用戶的文件的簡單方法。

+0

因此,您有一個服務帳戶,並且您將爲每個用戶將單獨的文件存儲到您的服務帳戶中? –

回答

3

服務帳戶是強大的工具。 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; 

} 
+0

斯賓塞你好。我試圖重複使用,但現在我看起來像是新版本。所以現在它不需要rsakey?它會使用json鍵嗎?我發現新版本只有一個init函數,可以指導我使用新版本。謝謝!! – GersonLobos

+0

查看下面鏈接的回購示例。它使用我寫的新GSApp服務。它取代了本例中使用的GSA庫。 https://github.com/Spencer-Easton/Apps-Script-Drive-Service-Account-Library –

相關問題