Как войти в почтовый ящик пользователя из сервиса с помощью oAuth и MS Graph API - PullRequest
0 голосов
/ 14 апреля 2020

Я добавляю поддержку аутентификации oAuth в приложение демона. В случае IMAP приложение входит в каждый почтовый ящик, указав ID пользователя / пароль. Office365 oAuth доступ требует регистрации приложения и использует поток предоставления учетных данных клиентов. В этом случае приложение аутентифицируется с Azure AD один раз и обращается к каждому почтовому ящику с помощью токена oAuth. Этот поток аутентификации требует значительных изменений существующей кодовой базы. Я хотел бы получить доступ к почтовому ящику логически так же, как IMAP (указать учетные данные пользователя для каждого почтового ящика). Office365 поддерживает этот процесс аутентификации, но использует системный браузер, в котором интерактивный пользователь дает согласие на доступ к почтовому ящику. Мое приложение-демон работает как автономный сервис без доступа к системному браузеру. Как войти в почтовый ящик пользователя с учетными данными пользователя?

1 Ответ

0 голосов
/ 14 апреля 2020

Предоставление учетных данных пароля владельца ресурса OAuth 2.0 (ROP C) позволяет приложению входить в систему пользователя, напрямую обрабатывая его пароль.

Пример запроса авторизации для справки:

// Line breaks and spaces are for legibility only.  This is a public client, so no secret is required. 

POST {tenant}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=user.read%20openid%20profile%20offline_access
&username=MyUsername@myTenant.com
&password=SuperS3cret
&grant_type=password

Обратите внимание, что предупреждение *1009*:

Microsoft рекомендует вам сделать не использовать поток ROP C. В большинстве сценариев ios доступны и рекомендуются более безопасные альтернативы. Этот поток требует очень высокой степени доверия к приложению и несет риски, которых нет в других потоках. Этот поток следует использовать только в том случае, если нельзя использовать другие более безопасные потоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...