2014-10-27 76 views
0

我已經有了一些成功的Google API集成的應用程序。我遇到了嘗試將Gmail集成添加到組合中的障礙。我使用.NET API,Google.Apis.Gmail.v1(版本1.9.0.140)。Gmail API返回403禁止且沒有其他消息(其他API的工作正常)

這裏呈現出成功的驅動API調用其次是Gmail的API調用失敗我的代碼:

var drive = new DriveService(Context.GoogleOAuthInitializer); 
var list = drive.Files.List().Execute(); 
Console.WriteLine(list.Items.Count); 
// Output: 100 (first page of results) 

var gmail = new GmailService(Context.GoogleOAuthInitializer); 
var result = gmail.Users.Drafts.List("me").Execute(); 
// Throws exception described below 

的.NET異常提供了這樣的信息:

Google.Apis.Requests.RequestError 
Forbidden [403] 
Errors [ 
    Message[Forbidden] Location[ - ] Reason[forbidden] Domain[global] 
] 

我使用以下範圍來獲取OAuth令牌。當我添加gmail作用域時,我(按預期)再次被Google提示,「您是否想讓此應用程序訪問您的電子郵件?」我還在Google API控制檯中啓用了gmail API。

https://www.google.com/m8/feeds 
https://www.googleapis.com/auth/drive 
https://www.googleapis.com/auth/cloudprint 
https://www.googleapis.com/auth/userinfo.email 
https://mail.google.com/ 
    * https://www.googleapis.com/auth/gmail.compose was tried as well 

真的希望有更多的東西在消息中有幫助指向我在正確的方向!

回答

2

我已經推出自己的OAuth實現的,我有這個代碼添加授權頭:

void IConfigurableHttpClientInitializer.Initialize(ConfigurableHttpClient httpClient) { 
    string auth = string.Format("AuthSub token=\"{0}\"", GoogleOAuthToken); 
    httpClient.DefaultRequestHeaders.Add("Authorization", auth); 
} 

,這工作得很好的驅動器,CloudPrint中,和聯繫人API的,但由於某種原因,Gmail的API的需要這樣的:

void IConfigurableHttpClientInitializer.Initialize(ConfigurableHttpClient httpClient) { 
    string auth = string.Format("Bearer {0}", GoogleOAuthToken); 
    httpClient.DefaultRequestHeaders.Add("Authorization", auth); 
} 

有道理,我想,雖然我不知道爲什麼API的將採取不同。

編輯:爲谷歌API的使用的AuthSub已被棄用:https://developers.google.com/accounts/docs/AuthSub

+0

OAuth或OAuth 2? – 2018-03-02 21:17:43

+0

@PreguntonCojoneroCabrónOAuth 2. – pettys 2018-03-05 20:38:29

0

Gmail的API是較新的,不接受舊的認證格式,其他的谷歌API可能 - 它僅接受的oauth2 。我不會推出自己的認證,應該有合理的庫在.net中進行。

+0

我不會,今天。 :)兩年前,當這個項目首次投入生產時,可用庫的合理性有點不同。基本的OAuth2令牌交換並不是非常重要。 – pettys 2014-10-27 23:34:55