2014-12-04 101 views
1

也許我根本就沒有得到「它」,「it」是完成這項工作所需的總體設置。ASP.Net中的Google Apis v3 - 「未經授權的客戶端或請求範圍」

我有一個網站,擦傷其他網站的體育賽事。我想從結果中自動創建Google日曆事件,因此我想在我的GMail帳戶的日曆中授予我的Web應用程序讀/寫訪問權限。

我一直試圖在頭上圍繞這個問題一個星期,但我無法讓它工作,並且它破壞了我作爲開發人員的自尊心。

我「明白」的方式是我需要Google API v3服務帳戶,因爲我不需要特定用戶的API密鑰。或者我需要一個簡單的API密鑰(而不是oAuth)?

無論如何,我去服務帳戶。

在我的HomeController我想獲取日曆,所以我知道這一切工作。

public void Calendar() 
    { 
     string serviceAccountEmail = "[email protected]"; 
     var certificate = new X509Certificate2(
      Server.MapPath("~") + @"\App_Data\key.p12", 
      "notasecret", 
      X509KeyStorageFlags.Exportable); 

     ServiceAccountCredential credential = 
      new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail) 
        { 
         Scopes = new[] 
           { 
            CalendarService.Scope.Calendar 
           }, 
         User = "MY-GMAIL-EMAIL" // Is this correct? 
        } 
        .FromCertificate(certificate)); 

     BaseClientService.Initializer initializer = new BaseClientService.Initializer(); 
     initializer.HttpClientInitializer = credential; 
     initializer.ApplicationName = "CALENDAR NAME"; // Correct? 

     var service = new CalendarService(initializer); 
     var list = service.CalendarList.List().Execute().Items; // Exception :-(
    } 

我得到的錯誤:

An exception of type 'Google.Apis.Auth.OAuth2.Responses.TokenResponseException' occurred in Google.Apis.dll but was not handled in user code 

Additional information: Error:"unauthorized_client", Description:"Unauthorized client or scope in request.", Uri:"" 

所以我嘗試了一堆東西在谷歌日曆,像製作公開,增加服務帳戶的電子郵件作爲一個讀/寫用戶。

我需要做什麼來授權我的Web應用程序,以便它可以代表我創建事件?

+0

此錯誤的例子是最有可能由於訪問日曆API。將服務帳戶電子郵件地址添加到您的日曆中,這可能會讓您訪問您的日曆。選中此鏈接https://developers.google.com/admin-sdk/directory/v1/guides/delegation#delegate_domain-wide_authority_to_your_service_account。另外,如果您不想訪問用戶日曆而不是服務帳戶,則可以使用Oauth – SGC 2014-12-04 17:37:36

回答

0

我已經在類似的帖子中使用了服務帳戶。我改變了一些我的代碼,並通過切換一些東西來讓它工作來列出我的日曆。我也可以創建活動。我沒有像在初始化程序中那樣添加用戶,而在應用程序名稱下,它是開發控制檯中應用程序的名稱。確保你給你的應用程序命名。確保您的服務帳戶與您的帳戶共享。

我稍微將代碼的列表部分更改爲此地址,並找回了我的日曆列表。

var list = service.CalendarList.List(); 
var listex = list.Execute(); 

看看我在Google API Calender v3 Event Insert via Service Account using Asp.Net MVC

相關問題