.net - Google.Apis.Requests.RequestError 需要登录 [401] 消息[需要登录] 位置

标签 .net google-cloud-storage

所以我从 Nuget (Google.Apis.Storage.v1, version=1.8.1.10) 下载了 Cloud Storage 的 .NET 客户端,使用开发者控制台创建了一个项目,生成了 API key ,启用了计费,创建了一个存储桶。
但是当我试图列出存储桶中的所有对象时,我收到了这个错误(需要登录)。任何想法为什么会这样? Cloud Storage 及其 JSON API 在控制台中启用。

这是我的示例应用程序的完整代码:https://gist.github.com/chester89/5d6a62633abab3969c32

最佳答案

API key 是一个简单的标记,表示“此调用与此项目相关联”。它对于管理配额很有用,但它不是 secret ,也不会将调用者验证为任何特定用户。匿名调用者可能无法浏览您的存储桶,并且您的调用是匿名进行的。

您可以通过授予匿名用户对您的存储桶的读取权限来解决此问题,但更好的办法是对您的请求进行身份验证。关于如何执行此操作,您有多种选择,具体取决于您是要使用自己的个人凭据进行调用,还是要使用与您的应用程序关联的服务帐户。此处记录了完整的说明: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",
});

关于.net - Google.Apis.Requests.RequestError 需要登录 [401] 消息[需要登录] 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727352/

相关文章:

c# - C#中的单例是什么?

spring-boot - 设置 GOOGLE_APPLICATION_CREDENTIALS 后,Google 云存储为部署在 GKE 上的 Spring 应用程序返回 401

c# - 强制 trackbar 值为十倍

c# - 为多个项目指定代码分析输出文件

.net - IAuthenticationFilter.OnAuthenticationChallenge() 的目的是什么

hadoop - Google Cloud Logs导出名称

从 Google Cloud Storage 下载时的 Java NIO 阻塞/非阻塞问题

linux - 谷歌云存储桶: Mounting in a Linux instance with Global Permissions

javascript - Google Storage API - 可恢复上传、AJAX、CORS 错误

c# - 在 WCF 服务上运行 svcutil.exe 时,OperationBehaviorAttribute 错误