是否可以使用 AssertionFlowClient 和服务帐户通过 IMAP 访问我域中任何用户的邮箱。与 2-legged OAuth 1.0 相同。
这是我的代码:
X509Certificate2 certificate = new X509Certificate2(...)
AuthorizationServerDescription server = new AuthorizationServerDescription {...};
List<string> scope = new List<string> {
"https://mail.google.com/",
"https://www.googleapis.com/auth/userinfo#email" };
AssertionFlowClient provider = new AssertionFlowClient(server, certificate)
{
ServiceAccountId = SERVICE_ACCOUNT_EMAIL,
Scope = string.Join(" ",scope.ToArray()),
};
IAuthorizationState grantedAccess = AssertionFlowClient.GetState(provider);
accessToken = grantedAccess.AccessToken;
using (Imap client = new Imap())
{
client.ConnectSSL("imap.gmail.com");
client.LoginOAUTH2("user@mydomain.com", accessToken);
...
}
我能够从 accounts.google.com 服务器检索有效的 accessToken(尽管 AssertionFlowClient/DotNetOpenAuth 有一个错误,目前我使用调试器和监视窗口来检索它)。
我确定 accessToken 是正确的,因为我可以使用它查询 www.googleapis.com/userinfo/email API 端点 - 它返回与 SERVICE_ACCOUNT_EMAIL 相同的值。
但是,Gmail 的 IMAP 服务器返回以下错误:
{"status":"400","schemes":"Bearer","scope":"https://mail.google.com/"}
此服务帐户的“管理 API 客户端访问” 在 cpanel 上配置为“电子邮件(读/写/发送) https://mail.google.com/ ”。
AssertionFlowClient/DotNetOpenAuth 错误表明没有人尝试过这个。
有可能吗?