Аутентификация POP3 с помощью OAuth дает ошибку протокола Err. Соединение закрыто

Моей компании необходимо обновить приложение для интеграции двустороннего протокола OAuth 2.0 для POP3. Я тестирую онлайн-аккаунт Outlook и пытаюсь пройти аутентификацию на outlook.office365.com (я также пробовал pop3.live.com).

Я зарегистрировался для получения пробной версии Exchange Online, используя свою тестовую учетную запись Outlook.

Я зарегистрировал свое приложение в Azure и включил разрешения для приложений API для MS Graph (Mail.ReadWrite, Mail.Send) и Exchange (full_access_as_app). Та же учетная запись Outlook, которую я использовал для регистрации Exchange, является глобальным администратором клиента Azure.

Я могу запросить действительный токен OAuth как из конечных точек Graph, так и из Exchange. Однако, когда я использую токен и пытаюсь войти на сервер POP, я получаю следующую ошибку:

<PopCmdSent>AUTH XOAUTH2 [token]</PopCmdSent>    
<PopCmdResp>-ERR Protocol error. Connection is closed. 10</PopCmdResp>

С последующим:

<error>POP3 authentication failed</error>

Я не уверен, что означает эта ошибка. Нужно ли настраивать мой почтовый компонент для использования другого протокола (не уверен, возможно ли это)? Может ли это быть проблемой в способе регистрации / аутентификации моего приложения или в настройках безопасности Exchange?

Логин работает нормально, если я использую Basic Auth вместо OAuth.

Как я могу решить эту проблему?

Редактировать

Недавно я наткнулся на статью Microsoft, в которой упоминается та же ошибка, но она связана с Exchange Server 2007. В статье говорится, что решение состоит в том, чтобы увеличить параметр MaxCommandSize на сервере Exchange с 40 КБ по умолчанию.

Это буквально единственное другое место, где я видел ссылку на эту ошибку в Интернете:

https://support.microsoft.com/en-ca/help/945552/error-message-when-you-try-to-connect-to-a-pop3-mailbox-on-exchange-se

Интересно, актуально ли это для Exchange Online / Outlook? Я не могу найти аналогичный параметр в своей пробной версии Exchange Online или в настройках почты Outlook

Редактировать 2

Я обменялся электронной почтой с разработчиком почтового компонента, который я использую (Chilkat Mailman). Очевидно, он несколько месяцев застрял на одной и той же проблеме. Он говорит, что правильные протоколы для XOAUTH2 реализованы в компоненте и должны работать одинаково для любого почтового сервера.

Однако у него также возникают проблемы с привязкой регистрации приложения Azure к определенной учетной записи O365 и получением правильной области / разрешений для проверки подлинности учетной записи.

Приятно слышать, что я не единственный, кто борется с этим, и что мне не хватает какой-то очевидной части. Но также вызывает беспокойство то, что разработчик популярного почтового компонента испытывает проблемы с воспроизведением того, что раньше было невероятно простым процессом.

Он написал статью о своем нынешнем понимании (не уверен, что это актуально):

https://cknotes.com/o365-imap-authentication-oauth-mfa-wtf/


person user2437443    schedule 24.03.2020    source источник


Ответы (2)


Я нашел решение, которое работает правильно.

Добавить ниже область

https://outlook.office.com/POP.AccessAsUser. Все явно в коде во время получения токена.

Это какой-то псевдокод на C #:

 private readonly string[] Scopes = new string[] { "outlook.office.com/POP.AccessAsUser.All" };
 m_clientApp=PublicClientApplicationBuilder.Create(m_mailAccount.ClientID) 
.WithAuthority($"{LoginURI}{m_mailAccount.TenantID}") .WithDefaultRedirectUri() .Build(); 
authResult = m_clientApp.AcquireTokenSilent(Scopes,existingUserID).ExecuteAsync().Result;
person Anand Vashishtha    schedule 28.07.2020
comment
Не могли бы вы добавить к ответу пример? - person Dima Kozhevin; 28.07.2020
comment
Это своего рода псевдокод в c # private readonly string [] Scopes = new string [] {outlook .office.com / POP.AccessAsUser.All}; m_clientApp = PublicClientApplicationBuilder.Create (m_mailAccount.ClientID) .WithAuthority ($ {LoginURI} {m_mailAccount.TenantID}) .WithDefaultRedirectUri () .Build (); authResult = m_clientApp.AcquireTokenSilent (Области действия, существующий идентификатор пользователя) .ExecuteAsync (). Результат; - person Anand Vashishtha; 28.07.2020

POP3 Auth2.0 для office365 был обновлен всего несколько дней назад.

См. "Объявление о поддержке OAuth для POP в Exchange Online "для получения дополнительной информации.

person Jack Yadrevsky    schedule 01.06.2020