2013-04-05 3 views
1

Возможно использование учетной записи AssertionFlowClient и службы для доступа к почтовому ящику любого пользователя в моем домене через IMAP. То же, что и с 2-сторонним OAuth 1.0.Доступ к IMAP Gmail с использованием AssertionFlowClient и учетной записи службы

Вот мой код:

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("[email protected]", accessToken); 
    ... 
} 

Я могу получить действительный маркер доступа с accounts.google.com сервера (хотя AssertionFlowClient/DotNetOpenAuth имеет ошибку, и в настоящее время я использую отладчик и посмотреть окно для его получения) ,

Я уверен, что маркер доступа правильно, как я могу запросить www.googleapis.com/userinfo/email API конечной точки, используя его - он возвращает то же значение, как SERVICE_ACCOUNT_EMAIL.

IMAP сервер Gmail возвращает следующие ошибки однако:

{"status":"400","schemes":"Bearer","scope":"https://mail.google.com/"} 

"Управление доступом клиента API" для этой учетной записи службы настроен на "E-mail (чтение/запись/Отправить) https://mail.google.com/" на CPanel.

Ошибка AssertionFlowClient/DotNetOpenAuth указывает, что никто никогда не пробовал это.

Возможно ли вообще?

ответ

1

Так что, похоже Google забыл включить эту маленькую деталь в их документации:

AssertionFlowClient provider = new AssertionFlowClient(server, certificate) 
    { 
     ServiceAccountId = SERVICE_ACCOUNT_EMAIL, 
     Scope = "https://mail.google.com/", 
     ServiceAccountUser = "[email protected]", // <- important 
    }; 

Он также кажется, что запрашивает доступ к нескольким областям (разделенный пробел) терпит неудачу.

 Смежные вопросы

  • Нет связанных вопросов^_^