Аутентификация Office365 без перенаправления входа

Я пытаюсь загрузить данные из электронной почты Office365 без необходимости взаимодействия с пользователем. Я создал приложение Azure, и у меня есть идентификатор клиента и секрет клиента. У меня также есть информация о пользователе (электронная почта + пароль).

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

Есть ли способ сделать это только через Office API, без необходимости перенаправления?

Спасибо за любую информацию.

1 ответ

Решение

Да, вы можете создать приложение-службу демона, используя поток учетных данных клиента для аутентификации приложения.

Вот пример кода для получения почты с помощью Microsoft Graph SDK с этим потоком:

string clientId = "";
string clientsecret = "";
string tenant = "";
string resourceURL = "https://graph.microsoft.com";
string authority = "https://login.microsoftonline.com/" + tenant + "/oauth2/token";
string userMail = "user1@yourdomain.onmicrosoft.com";

var credential = new ClientCredential(clientId, clientsecret);
AuthenticationContext authContext =new AuthenticationContext(authority);
var authResult = await authContext.AcquireTokenAsync(resourceURL, credential);
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
   (requestMessage) =>
   {
       requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authResult.AccessToken);

       return Task.FromResult(0);
   }));

var items = await graphserviceClient.Users[userMail].Messages.Request().OrderBy("receivedDateTime desc").GetAsync();

foreach (var item in items)
{
        Console.WriteLine(item.Subject);
}

Нам нужно зарегистрировать приложение на портале Azure AD и предоставить область приложения Mail.Read, как показано ниже: введите описание изображения здесь

Обратитесь сюда для более подробной информации о вызове Microsoft Graph в сервисе или приложении-демоне.

Другие вопросы по тегам