我已经获得了几个成功的Google API集成的应用程序。我试图将Gmail集成添加到组合中。我正在使用.NET API,Google.Apis.Gmail.v1(版本1.9.0.140)。
我的代码显示了一个成功的Drive 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
真的希望在消息中有更多帮助指出我正确的方向!!!
答案 0 :(得分:2)
我已经推出了自己的OAuth实现,并且我已经使用此代码添加了授权标头:
void IConfigurableHttpClientInitializer.Initialize(ConfigurableHttpClient httpClient) {
string auth = string.Format("AuthSub token=\"{0}\"", GoogleOAuthToken);
httpClient.DefaultRequestHeaders.Add("Authorization", auth);
}
这适用于云端硬盘,云端打印和通讯录API,但出于某种原因,Gmail API需要这样做:
void IConfigurableHttpClientInitializer.Initialize(ConfigurableHttpClient httpClient) {
string auth = string.Format("Bearer {0}", GoogleOAuthToken);
httpClient.DefaultRequestHeaders.Add("Authorization", auth);
}
我猜是有道理的,虽然我不知道为什么API会有不同的行为。
修改:不推荐使用AuthSub用于Google API:https://developers.google.com/accounts/docs/AuthSub
答案 1 :(得分:0)
Gmail API比那些更新,并且不接受其他Google API可能使用的旧身份验证格式 - 它只接受oauth2。我不会推出自己的身份验证,在.net中应该有合理的库。