2017-10-15 99 views
0

我正在使用swift對我的谷歌雲存儲桶進行API調用。Google雲端存儲 - 匿名用戶沒有storage.buckets.list項目訪問權限XXXXXXXXXX

import PlaygroundSupport 
import Foundation 

let url = URL(string: "https://www.googleapis.com/storage/v1/b?project=<project id>") 

let task = URLSession.shared.dataTask(with: url!) { data, response, error in 
    guard error == nil else { 
     print(error!) 
     return 
    } 
    guard let data = data else { 
     print("Data is empty") 
     return 
    } 

    let json = try! JSONSerialization.jsonObject(with: data, options: []) 
    print(json) 
} 

task.resume() 
PlaygroundPage.current.needsIndefiniteExecution = true 

不幸的是,這是什麼了:

{ 
    error =  { 
     code = 401; 
     errors =   (
         { 
       domain = global; 
       location = Authorization; 
       locationType = header; 
       message = "Anonymous users does not have storage.buckets.list access to project <project id>."; 
       reason = required; 
      } 
     ); 
     message = "Anonymous users does not have storage.buckets.list access to project <project id>."; 
    }; 
} 

谷歌雲文檔是非常混亂。在這種情況下,我不知道如何指定用戶。什麼是正確的方法?

回答

0

清單存儲桶要求您的請求被授權爲具有storage.buckets.list permssion的用戶或服務帳戶。這通常是項目中「所有者」,「編輯者」,「查看者」或「storage.admin」角色的帳戶。

首先要決定的是您是否要授權爲用戶或服務帳戶。如果這個swift應用程序要訪問屬於最終用戶的項目,請選擇用戶授權。如果需要在應用程序自己的項目中列出存儲桶,請選擇服務帳戶認證。

如果您選擇服務帳戶,則必須創建一個服務隊帳戶,併爲它生成憑證(見here),然後使用你的應用程序中生成一個JWT您在API調用過程中Authorization頭傳遞(見here )。

如果您選擇代表最終用戶進行身份驗證,則應用程序必須執行「OAuth 2.0三條腿流程」,您的應用程序會通過請求令牌將您的用戶發送給Google,然後Google會爲用戶提供身份驗證對話框並選擇授予對您的應用程序的訪問權限,如果他們說是將其重定向到刷新令牌。然後,您的應用程序可以使用刷新令牌以及API調用(或者更好,使用刷新令牌獲取短期訪問令牌來發送)。您如何做到這一點取決於應用程序的類型,詳情請參閱here

相關問題