2016-08-31 3 views
3

Мне нужно вставить записи календаря в учетную запись Outlook клиента. Это довольно прямолинейно с Exchange. Вы просто авторизуетесь с пользователем, у которого есть доступ, а затем вы можете вводить записи в учетные записи других пользователей. Вроде бы совершенно другими в офисе 365.Consume Office 365 REST API без UI

Я пытался следовать инструкциям: https://dev.outlook.com/restapi/getstarted

Я создал приложение и получил приложение идентификатора клиента. Но вся документация вокруг oAuth. Вообще говоря, oAuth предназначен для сценариев, когда пользователю необходимо вводить свои учетные данные через окно браузера, которое затем подтверждает с пользователем, какие учетные данные они хотят разрешить приложению.

Это не соответствует моему сценарию. Мне нужно иметь возможность вставлять записи календаря в учетную запись без какого-либо пользовательского интерфейса. Это интеграция с конечным концом. Ему просто нужно делать свою работу молча.

Я смотрел на этот образец приложения: https://github.com/OfficeDev/O365-Win-Snippets

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

Когда я пытаюсь вызвать REST API, упомянутый на начальной странице, он возвращает HTML. Это URL-адрес он упоминает:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id= & redirect_uri = HTTP% 3A% 2F% 2Flocalhost% 2Fmyapp% 2F & response_type = Код & Объем = HTTPS% 3A% 2F% 2Foutlook.office.com% 2Fmail.read

Я пробовал несколько перестановок этого URL с моим идентификатором клиента. Я попытался передать свои учетные данные Office 365 через базовую проверку подлинности HTTP.

Я застрял.

+0

Вы можете попытаться сохранить маркер доступа вы извлекать при входе пользователя в систему и использовать что токен доступа для выполнения запросов к API. Токен доступа действителен в течение 1 часа, я считаю. Вероятно, вы захотите использовать новый Microsoft Graph api btw: http://graph.microsoft.io/en-us/docs/overview/overview – koelkastfilosoof

+0

Это не работает. Это задняя система. У нас нет никаких учетных данных пользователя, и у нас их никогда не будет. Взамен мы просто получили права администратора, чтобы вставлять записи календаря в их почтовые ящики. –

+0

Я думаю, что я понял, что Office API - это набор клиентских API, которые просто по сути позволяют автоматизировать клиентское программное обеспечение - не делайте материал типа admin в задней части. Наверное, для этого нужны сервисы обмена. Итак, действительно, я думаю, что я был на дикой гусиной погоне. Могу ли я использовать API обмена для администрирования учетных записей Office 365 групп? –

ответ

4

Ответ прост. Используйте API API Exchange, а не Office 365 API.

Я был смущен, потому что предположил, что Office 365 является другим объектом Exchange, но почтовый сервер Office 365 - это один гигантский сервер Exchange. Вот пример кода для хорошей оценки. Это пример входа на сервер Exchange Office 365 и отправка записи календаря на адрес электронной почты. Просто.

Я сделал дикое предположение о том, обменной Url и это было правильно: https://outlook.office365.com/ews/exchange.asmx

//Connect to exchange 
    var ewsProxy = new ExchangeService(ExchangeVersion.Exchange2013); 
    ewsProxy.Url = new Uri("https://outlook.office365.com/ews/exchange.asmx"); 

    //Create the meeting 
    var meeting = new Appointment(ewsProxy); 

    ewsProxy.Credentials = new NetworkCredential(_Username, _Password); 
    meeting.RequiredAttendees.Add(_Recipient); 

    // Set the properties on the meeting object to create the meeting. 
    meeting.Subject = "Meeting"; 
    meeting.Body = "Please go to the meeting."; 
    meeting.Start = DateTime.Now.AddHours(1); 
    meeting.End = DateTime.Now.AddHours(2); 
    meeting.Location = "Location"; 
    meeting.ReminderMinutesBeforeStart = 60; 

    // Save the meeting to the Calendar folder and send the meeting request. 
    meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy); 
1

Я понимаю, что это возможно, но аутентификация выглядит довольно сложной. Для начала любое приложение, которое требует интеграции Office 365, также должно интегрироваться со связанным с ним Azure AD. Вы можете зарегистрировать свое приложение для конкретных пользователей, чтобы оно имело разрешения, необходимые для любых операций, которые необходимо выполнить. См. Здесь для краткого изложения этого компонента: https://msdn.microsoft.com/en-us/office/office365/howto/connect-your-app-to-o365-app-launcher?f=255&MSPPError=-2147217396#section_2

Для аутентификации вам требуется модель приложения демона/сервера. Я еще не пытался это сделать, но он описан здесь и выглядит так, как будто он должен соответствовать вашим потребностям (см. Раздел «Демоны или серверное приложение для веб-интерфейса»): https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/#daemon-or-server-application-to-web-api

+0

Это выглядит многообещающе. Расследование ... –

+0

Подождите. Это для Azure ... Я предполагаю, что существует некоторая связь между Office 365 и Azure, но, предполагая, что я могу пройти аутентификацию с помощью Azure, как это позволит мне получить доступ к API REST Office 365? –

0

Для того, чтобы позвонить в Office 365 REST API, приложение требует маркер доступа от Azure Active Directory, поэтому вам необходимо (обязательное) зарегистрировать приложение в Microsoft Azure Active Directory (Azure AD). Ваш Office 365 account in turn needs to be associated with Azure AD. This answer кратко описывает, как зарегистрировать приложение в Azure AD, чтобы использовать API Office 365.

Basic схема аутентификации

пересортицы Basic аутентификации, в настоящее время он включен для API версии 1,0, в следующем примере показано, как использовать Outlook Calendar REST API в приложении .NET.

Предпосылки:

domain: https://outlook.office365.com/ 
API version: v1.0 

Вот пример, который получает свои календари и печатает имена его

private static async Task ReadCalendars() 
{ 
    var handler = new HttpClientHandler(); 
    handler.Credentials = new NetworkCredential() 
    { 
     UserName = ConfigurationManager.AppSettings["UserName"], 
     Password = ConfigurationManager.AppSettings["Password"] 
    }; 

    using (var client = new HttpClient(handler)) 
    { 
     var url = "https://outlook.office365.com/api/v1.0/me/calendars"; 
     var result = await client.GetStringAsync(url); 

     var data = JObject.Parse(result); 
     foreach (var item in data["value"]) 
     { 
      Console.WriteLine(item["Name"]); 
     } 
    } 
} 
+0

Я понимаю, что вы здесь говорите, но это было вопросом недопонимания. Я искал интеграционное решение для задней части, тогда как Office 365 API предназначен для интеграции/автоматизации на передней панели. Базовая аутентификация прекращена, поэтому это не долгосрочное решение. Долгосрочным решением является использование Web-интерфейса Exchange, как я уже упоминал. –

Смежные вопросы