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

时间:2014-05-18 22:06:36

标签: .net google-cloud-storage

所以我从Nuget(Google.Apis.Storage.v1,版本= 1.8.1.10)下载了用于云存储的.NET客户端,使用Developer Console创建了一个项目,生成了API密钥,启用了计费,创建了一个存储桶。 /> 但是,当我尝试列出存储桶中的所有对象时,我收到此错误(需要登录)。任何想法为什么会这样?在控制台中启用了云存储及其JSON API。
以下是我的示例应用中的完整代码:https://gist.github.com/chester89/5d6a62633abab3969c32

2 个答案:

答案 0 :(得分:5)

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",
});

答案 1 :(得分:0)

放Apikey,401错误永远不会到来。

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