2014-05-18 101 views
3

所以,我下載.NET客戶端的雲存儲從的NuGet(Google.Apis.Storage.v1,版本= 1.8.1.10),創造了一個使用開發者控制檯的項目,生成的API密鑰,啓用結算,創建一個存儲桶。
但是,當我試圖列出一個桶中的所有對象,我得到這個錯誤(需要登錄)。任何想法,爲什麼這可能是?雲存儲及其JSON API在控制檯中啓用。
下面是我的示例應用程序全碼:https://gist.github.com/chester89/5d6a62633abab3969c32Google.Apis.Requests.RequestError需要登錄[401]消息[需要登錄]位置

回答

4

API密鑰是一個簡單的標記,上面寫着「此調用與該項目有關的。」它對於管理配額很有用,但它不是祕密,並且不會將調用者認證爲任何特定用戶。據推測,您的存儲桶不可匿名來電,您的來電是匿名的。

你可以通過授予匿名用戶只讀訪問權限的桶解決這個問題,但更好的辦法是將驗證您的請求。根據您是否想用自己的個人憑證撥打電話,或者是否想要使用與您的應用程序相關聯的服務帳戶,您有幾個選擇。完整說明,這裏記載:https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth

猜你想爲自己進行認證和你正在寫,將在桌面上運行的應用程序,這裏有一個例子:

UserCredential credential; 
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) 
{ 
    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
     GoogleClientSecrets.Load(stream).Secrets, 
     new[] { BooksService.Scope.Books }, 
     "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary")); 
} 
// Create the service. 
var service = new BooksService(new BaseClientService.Initializer() 
{ 
    HttpClientInitializer = credential, 
     ApplicationName = "Books API Sample", 
}); 
+0

因此,如果我在服務器上運行應用程序,我只需使用ServiceAccount呢? – chester89

+0

是的。一種常見模式是擁有一個屬於該項目成員的服務帳戶。該應用程序具有與該服務帳戶關聯的私鑰,並使用該密鑰對其自身進行身份驗證。 –

0

認沽Apikey和401錯誤永遠不會到來。

var service = new DirectoryService(new BaseClientService.Initializer() 
{ 
    HttpClientInitializer = credential, 
    ApplicationName ="Books API Sample", 
    ApiKey = "gjgggjggskkxkhgd" 
});