2015-01-15 122 views
3

我嘗試使用(node.js)示例應用程序對Google API進行身份驗證,然後發出Google Drive請求。我嘗試運行的樣本是從googleapis的Node.js庫using jwt GitHub的自述:帶有服務帳戶的Google身份驗證失敗(node.js)

var jwtClient = new googleapis.auth.JWT(
    '[email protected]', 
    './key.pem', 
    null, 
    ['https://www.googleapis.com/auth/drive'], 
    '[email protected]'); 

jwtClient.authorize(function(err, tokens) { 
    if (err) { 
    console.log(err); 
    return; 
    } 

    // Make an authorized request to list Drive files. 
    drive.files.list({ auth: jwtClient }, function(err, resp) { 
    // handle err and response 
    }); 
}); 

驗證失敗:

{ error: 'unauthorized_client', 
    error_description: 'Unauthorized client or scope in request.' } 

我不是100%地肯定了「我的。個人@ gmail.com」。使用我的客戶端ID,我收到錯誤「無效的模擬電子郵件地址。」。

我已根據文檔創建了服務帳戶客戶端ID,服務電子郵件和證書指紋。我必須指定其他的東西嗎?我的範圍不正確?如果是,它應該是什麼?

Google開發者控制檯中已啓用Google Drive API。我也啓動了試用帳戶。

回答

13

呃,在嘗試了很多事情之後,其結果相當簡單:在沒有'impersonate'的情況下完成上述示例 - 僅使用電子郵件。代碼:

var jwtClient = new googleapis.auth.JWT(
    '[email protected]', 
    './key.pem', 
    null, 
    ['https://www.googleapis.com/auth/drive']); 

自述的實例可作爲內部例子一個完整的文件(here)。

+0

我知道這是舊的 - 但你有沒有試過這個https://developers.google.com/admin-sdk/reports/v1/guides/delegation允許'模仿'? –

+0

@DaveBriand:好吧,這不是很久以前。但我已經開始忘記。對於我的目的而言,並不是必需的(坦率地說,我不太確定它是什麼時候)。我的用例很簡單(訪問公共驅動器數據)。 – tokosh

+0

感謝您的回覆 –