【问题标题】:Gmail API credentialing?Gmail API 认证?
【发布时间】:2015-08-08 05:56:26
【问题描述】:

我将 Gmail API 认证流程设置如下:

string clientSecret = Settings.ClientSecret;
string clientId = Settings.ClientId;
Task<UserCredential> tCredential;
ClientSecrets clientSecrets = new ClientSecrets {ClientId = clientId, ClientSecret = clientSecret};
tCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    clientSecrets,
    Scopes,
    "user",
    CancellationToken.None);
UserCredential credential;
try
{
    credential = tCredential.Result;
}
catch (Exception ex)
{
    throw;
}
_service = new GmailService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Draft Sender", //applicationName,
});

我没有将凭据设置为保存在任何类型的文件中。但是,当我运行代码时,只会提示我允许访问电子邮件帐户一次。初始授权后,后续运行不会生成授权提示。在我尝试更改正在访问的电子邮件地址之前,这实际上是一件好事。

它的工作方式是我有两个电子邮件地址:一个个人电子邮件地址和一个测试电子邮件地址。我让程序运行,以便它访问我个人电子邮件地址的内容。然后,我需要开发删除消息的代码,所以我决定切换到一个测试电子邮件地址。

要使用 Gmail API 访问电子邮件地址,您必须启用 API 并在 Google 开发者控制台中为您要访问的每个电子邮件地址生成一个“客户端 ID”和“客户端密码”。我已经为个人电子邮件和测试电子邮件生成了两个值。

接下来,我更新了代码中的客户端 ID 和客户端密码,以便我的测试电子邮件成为目标,而不是我的个人电子邮件。

当我将 clientId 和 clientSecret 更新为新的电子邮件地址时,我最初收到授权提示,但授权提示要求访问旧电子邮件帐户。我继续前进并授权只是为了看看会发生什么。现在,即使更改了 clientId 和 secret,程序也可以访问原始电子邮件地址。我什至尝试更改原始电子邮件地址的密码,但程序仍然可以访问。

我必须相信有某种文件正在存储凭据,因为该程序如何访问电子邮件收件箱?如何找到此文件或获取此代码以访问不同的电子邮件收件箱?我是否需要手动创建文件才能绕过自动执行的操作?

【问题讨论】:

  • 您是否尝试更改创建项目的用户的电子邮件地址?请清楚解释将“clientId 和 clientSecret 更新为新的电子邮件地址”是什么意思?另外,您是否尝试在更新到新电子邮件时删除 cookie?

标签: c# email gmail-api


【解决方案1】:

好的,我能够在没有实际修复的情况下解决该问题。通过从 Gmail API 控制台刷新所有涉及的电子邮件地址的密码,我强制身份验证过期。

然后,当我进入重新授权程序时(当我在 Visual Studio 中运行它时,IE 出现授权提示),我确保将 gmail 帐户(在右上角列出)更改为电子邮件我想授权的帐户。

这行得通;它第一次起作用和不起作用的事实向我表明存在一些身份验证问题……但我不知道它们是什么,而且推测本质上是推测性的,因为我必须确切地知道是什么我做到了。

如果有人了解发生了什么,我真的很想知道,因为在授予帐户访问权限后,我仍然无法更改身份验证器的状态(范围)(换句话说:一旦我授予访问权限,似乎该访问权限被锁定在该级别,并且代码中的任何更改选项似乎都没有做任何事情)。

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2013-08-08
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多