使用 OAuth 登录的 Google 电子邮件返回 Chimlkat.Imap 的无效凭据
Posted
技术标签:
【中文标题】使用 OAuth 登录的 Google 电子邮件返回 Chimlkat.Imap 的无效凭据【英文标题】:Google Email Login with OAuth Returns Invalid credentials for Chimlkat.Imap 【发布时间】:2020-11-06 13:07:57 【问题描述】:尝试使用 Chilkat IMAP 电子邮件组件通过带有 OAuth2 的 IMAP 访问 Google 电子邮件帐户。我正在从服务器响应中收到这个...
serverResponse: aaab NO [AUTHENTICATIONFAILED] 无效凭据 (失败)
我们正在使用 VB.NET,我正在按照https://www.example-code.com/csharp/gmail_imap_login_oauth2.asp 的示例进行操作。使用 SSL 和端口 993 连接到 imap.gmail.com。我正在设置 Imap.AuthMethod = "XOAUTH2"
并使用 AuthToken 而不是密码。 Imap.Login(LoginName, AuthToken)
是错误消息的来源。
我已使用 Gmail 帐户启用 IMAP,并且启用了不太安全的应用程序。我确认为密码设置了正确的身份验证令牌,并且我检查了 API 范围是否正确设置为 https://mail.google.com/。如果我直接尝试登录名和密码,则登录成功。
不确定还需要检查什么来找出导致凭据无效错误的原因。
【问题讨论】:
你好@kencleary!我无法复制您的问题。我可以看到您使用的是第三方 Chilkat 库,而不是官方的Google Gmail API。为了防止 Chilkat 端的任何错误配置,您能否尝试在没有它的情况下连接到 Gmail API?您可以使用.NET quickstart 作为参考。 谢谢雅克。我能够让它连接并读取 .NET 快速入门链接之后的文件夹。我可以把它带回奇尔卡特,看看他们怎么说。 【参考方案1】:找出问题所在。对于令牌,我将其设置为“Bearer ya29.a0AfH6SMDF ...”,这是我们为用于日历同步的 nSoftware 组件设置的。我删除了令牌的“Bearer”部分,并且能够使用 Chilkat IMAP 电子邮件组件正常登录。
【讨论】:
【参考方案2】:这个问题的原因找到了。
在对 Login 的调用中,应用程序传递“Bearer”而不是“”作为密码:
正确: 成功 = imap.Login("user@gmail.com","");
不正确: 成功 = imap.Login("user@gmail.com","Bearer");
访问令牌被认为是密码。 Chilkat 在编写发送到 IMAP 服务器的 XOAUTH2 数据时,会在内部添加所需的“Bearer”字符串。
【讨论】:
【参考方案3】:我写了这篇博文来了解整个过程:https://cknotes.com/gmail-imap-oauth2-a-walkthrough/
-
在https://console.developers.google.com/apis/credentials,创建凭据(客户端 ID、客户端密码)并定义重定向 URL
从您的应用程序中获取初始 OAuth2 令牌的代码。
使用 OAuth2 在 IMAP 协议中进行身份验证的代码。
刷新令牌的代码
我还上传了一些演示 1 和 2 的 YouTube 视频。
【讨论】:
我们获取令牌并刷新它。问题是尝试使用该令牌通过 Chilkat IMAP 电子邮件组件登录。我们一直在使用 Chilkat 组件通过 IMAP 仅使用标准登录名和密码登录。我们所做的唯一更改是,如果我们使用令牌,我们设置 AuthMethod 将密码更改为令牌。根据 Chilkat 文档,我认为这是使用身份验证令牌登录的唯一更改,对吧?以上是关于使用 OAuth 登录的 Google 电子邮件返回 Chimlkat.Imap 的无效凭据的主要内容,如果未能解决你的问题,请参考以下文章
Google oAuth登录 - 如何仅允许列入白名单的电子邮件登录我的应用
Google OAuth2 登录 - 获取 YouTube 昵称和真实电子邮件地址