【发布时间】:2016-11-25 21:11:21
【问题描述】:
我正在尝试使用 OAuth 和 EWS 托管 API 登录 Office 365 Exchange Online。
我能够使用连接到 Office 365 Web API (REST),因此我确实拥有来自 Active Directory 身份验证库 (ADAL) 的有效令牌。
现在,我正在尝试使用 EWS 和 TokenCredentials 进行连接。
我认为代码很简单:
public static ExchangeService ConnectToServiceWithImpersonation(string token)
{
var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
if (true)
{
service.TraceListener = new TraceListener();
service.TraceFlags = TraceFlags.All;
service.TraceEnabled = true;
}
var credentials = new TokenCredentials(token);
service.Credentials = credentials;
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
return service;
}
令牌由 ADAL 生成,而 ADAL 又来自使用“Office 365 API 工具 - 预览”的示例代码
// Obtain information for communicating with the service:
Office365ServiceInfo serviceInfo = Office365ServiceInfo.GetExchangeServiceInfo();
if (!serviceInfo.HasValidAccessToken)
{
return Redirect(serviceInfo.GetAuthorizationUrl(Request.Url));
}
// Connect to Exchange
var service = ConnectToServiceWithImpersonation(serviceInfo.AccessToken);
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
在 Folder.Bind 调用中,我收到 401 Unauthorized 错误。 EWS Trace 给了我这个:
2014-04-06 12:06:39.2012 TRACE ExchangeWebServices: EwsResponseHttpHeaders -> <Trace Tag="EwsResponseHttpHeaders" Tid="11" Time="2014-04-06 10:06:39Z">
HTTP/1.1 401 Unauthorized
request-id: 01ba1ca9-2850-480a-9d65-ec55bfef8657
X-CasErrorCode: BadSamlToken
X-FEServer: AMSPR04CA018
Content-Length: 0
Cache-Control: private
Date: Sun, 06 Apr 2014 10:06:39 GMT
Server: Microsoft-IIS/7.5
WWW-Authenticate: Basic Realm=""
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
不幸的是,几个小时的谷歌搜索并没有真正帮助,似乎没有关于 EWS 和 OAuth 身份验证的具体信息,我不知道如何进一步解决它,所以我希望任何人有一些建议关于如何让它工作。
【问题讨论】:
-
是的,这不涉及 EWS 托管 API,只涉及 Web API (REST)
标签: c# oauth-2.0 ms-office exchangewebservices