Аутентификация 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 в сервисе или приложении-демоне.