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 エンドポイントをクエリできるため、 accessToken は正しいと確信しています。SERVICE_ACCOUNT_EMAIL と同じ値が返されます。
ただし、Gmail の IMAP サーバーは次のエラーを返します。
{"status":"400","schemes":"Bearer","scope":"https://mail.google.com/"}
このサービス アカウントの [API クライアント アクセスの管理] は、cpanel で[メール (読み取り/書き込み/送信) https://mail.google.com/ ] に設定されています。
AssertionFlowClient/DotNetOpenAuth バグは、誰もこれを試したことがないことを示しています。
それはまったく可能ですか?