MailKit не удалось выполнить SMTP OAuth с сервером Microsoft 365 - PullRequest
1 голос
/ 30 мая 2020

Я использую MailKit 2.6.0.0 для подключения к Microsoft 365 с использованием OAuth для аутентификации с помощью POP3, IMAP и SMTP. ImapClient и Pop3Client успешно проходят аутентификацию, а SmtpClient - нет. Вот журнал протокола из MailKit:

Connected to smtp://smtp.office365.com:587/?starttls=always
S: 220 MN2PR04CA0011.outlook.office365.com Microsoft ESMTP MAIL Service ready at Sat, 30 May 2020 07:48:32 +0000
C: EHLO [192.168.1.240]
S: 250-MN2PR04CA0011.outlook.office365.com Hello [my-ip]
S: 250-SIZE 157286400
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-STARTTLS
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250 SMTPUTF8
C: STARTTLS
S: 220 2.0.0 SMTP server ready
C: EHLO [192.168.1.240]
S: 250-MN2PR04CA0011.outlook.office365.com Hello [my-ip]
S: 250-SIZE 157286400
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-AUTH LOGIN XOAUTH2
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250 SMTPUTF8
C: AUTH XOAUTH2 BASE64USERANDTOKEN
S: 535 5.7.3 Authentication unsuccessful [MN2PR04CA0011.namprd04.prod.outlook.com]
C: QUIT
S: 221 2.0.0 Service closing transmission channel

Я открыл значение BASE64USERANDTOKEN, и оно выглядит точно так же, как и при успешных соединениях POP3 / IMAP. Я не знаю, вызвана ли неудачная аутентификация SMTP неправильной конфигурацией Microsoft 365 или проблемой в диалоге протокола. Я использую подписку разработчика Microsoft 365, предоставленную в качестве преимущества моей подписки MSDN. Я не могу найти какой-либо параметр конфигурации, указанный c для SMTP, и я использовал правильную область (https://outlook.office365.com/SMTP.Send} при обмене кодом авторизации для маркера доступа. Я также не могу найти ни одного записи журнала ошибок в Microsoft 365, которые могут помочь в диагностике проблемы.

Что касается диалога протокола, я заметил, что описание Microsoft на https://docs.microsoft.com/en-gb/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth

[connection begins]
C: auth xoauth2
S: 334
C: dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==
S: 235 2.7.0 Authentication successful
[connection continues...]

отличается из Google по адресу https://developers.google.com/gmail/imap/xoauth2-protocol, который похож на журнал протокола MailKit:

[connection begins]
S: 220 mx.google.com ESMTP 12sm2095603fks.9
C: EHLO sender.example.com
S: 250-mx.google.com at your service, [172.31.135.47]
S: 250-SIZE 35651584
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
S: 250-ENHANCEDSTATUSCODES
S: 250 PIPELINING
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==
S: 235 2.7.0 Accepted
[connection continues...]

Является ли это возможной причиной сбоя аутентификации?

1 Ответ

1 голос
/ 02 июня 2020

Найдена реальная причина неудачной аутентификации. Как упоминалось в исходном сообщении, я использую свою подписку разработчика Microsoft 365, которая дает мне домен, похожий на schlagermeier.onmicrosoft.com (не настоящий, ребята). Я зашел на портал администрирования Microsoft 365 для этой учетной записи, и мне предложили «управляемую настройку» или что-то подобное. Это был своего рода волшебный интерфейс в виде серии веб-страниц. На одной странице был «выбор домена» с двумя переключателями. Одна кнопка была помечена как «Использовать schlagermeier.onmicrosoft.com», а другая - «Ввести домен» с полем ввода для домена, которым вы уже зарегистрированы и которым владеете (например, schlagermeier.com). Получается, что вам нужно явно указать домен для работы SMTP, что имеет смысл. Я просто предположил, что будет использоваться домен onmicrosoft.

...