使用没有UI的Office 365 REST API
本文关键字:Office REST API UI | 更新日期: 2023-09-27 18:05:06
我需要将日历条目推送到客户端的Outlook帐户。这在Exchange中是相当直接的。您只需使用具有访问权限的用户进行身份验证,然后就可以将条目推送到其他用户的帐户中。在Office 365中似乎完全不同。
我试着遵循这里的说明:https://dev.outlook.com/restapi/getstarted
我创建了应用程序并获得了应用程序的客户端ID。但是,所有的文档都是围绕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 % 3 a % 2 f % 2 flocalhost % 2 fmyapp % 2的范围response_type = code& 3 = https % % 2 f % 2 foutlook.office.com % 2 fmail.read
我已经尝试了这个Url与我的客户端ID的一些排列。我已经尝试过通过基本的http身份验证来传递我的Office 365凭据。
我困。
答案很简单。使用Exchange API,而不是Office 365 API。
我很困惑,因为我以为Office 365和Exchange是不同的实体,但Office 365电子邮件服务器只是一个巨大的Exchange服务器。下面是一些示例代码。这是一个登录到Office 365的Exchange服务器并将日历条目发送到电子邮件地址的示例。简单。
我做了一个疯狂的猜测关于交换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);
我的理解是这是可能的,但是身份验证看起来相当复杂。首先,任何需要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
对于身份验证,您需要一个守护进程/服务器应用程序模型。我还没有尝试过这样做,但这里有文档记录,看起来应该可以满足您的需求(请参阅守护程序或服务器应用程序到Web API一节):https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/#daemon-or-server-application-to-web-api为了调用Office 365 REST API,应用程序需要Azure Active Directory的访问令牌,这就是为什么你需要(强制)在Microsoft Azure Active Directory (Azure AD)中注册应用程序。反过来,您的Office 365帐户需要与Azure AD相关联。这个答案总结了如何在Azure AD中注册应用程序以使用Office 365 API。
Basic
认证方案
关于Basic
认证,目前在API版本1.0中是启用的,下面的例子演示了如何在。net应用程序中使用Outlook Calendar REST API。
先决条件:
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"]);
}
}
}