对EWS进行OAuth身份验证

时间:2014-03-04 19:52:21

标签: ms-office sharepoint-2013 office-2013

我无法在Office 365中使用OAuth凭据与EWS一起工作。在高级别我编写了一个SharePoint 2013应用程序而且我试图访问用户Exchange中的邮箱数据。我确认我的EWS代码是正确的'通过将OAuth代码换成硬编码的用户名和密码,它可以很好地工作。

我使用下面的代码返回令牌,但是当我尝试访问用户的收件箱时,我获得了401。为简洁起见,我将其删除,但在访问收件箱之前,我将令牌传递到新的OAuthCredentials对象。

string acsUrl = "https://accounts.accesscontrol.windows.net/";
using (WebClient exchangeTokenClient = new WebClient())
{
    exchangeTokenClient.BaseAddress = acsUrl;

NameValueCollection requestParams = new NameValueCollection();
requestParams.Add("grant_type", "client_credentials");
requestParams.Add("client_id", "<clientid>@<realm>");
requestParams.Add("client_secret", "<client secret>");
requestParams.Add("resource", "00000002-0000-0ff1-ce00-000000000000/outlook.office365.com@<realm>");
exchangeTokenClient.Headers.Add("Authorization", "Bearer " + ((SharePointAcsContext)spContext).UserAccessTokenForSPAppWeb);

byte[] responseBytes = exchangeTokenClient.UploadValues("<realm>/tokens/OAuth/2", "POST", requestParams);

string response = Encoding.UTF8.GetString(responseBytes);
}

我越是想到这一点,我就越想知道我的应用程序是什么?需要权限在Exchange服务器上,如果这是401的根本原因。

有没有人真的这样做过?我觉得它应该是可能的,但我似乎无法找到关于这个过程的大量文档。

由于

2 个答案:

答案 0 :(得分:0)

第1部分: 嗨,乔,你不能这样做。您似乎尝试将SharePoint令牌重新播放到Exchange端点。 Exchange将拒绝SharePoint令牌,因为令牌不适用于Exchange端点(它无法通过受众检查)。

如果要进行Auth,现在要使其工作,Exchange的唯一方法就是使用我们在SPC上宣布的新OAuth2模型。您可以在“http://www.sharepointconference.com/content/sessions/SPC379”的会话演示中获取更多详细信息(我相信我们会在几天后发布幻灯片)。我还建议您查看三个文档,即:使用Common Consent Framework进行身份验证和授权:“http://msdn.microsoft.com/en-us/library/dn605895(v=office.15).aspx”,...

答案 1 :(得分:0)

第2部分 ...如何:使用Common Consent Framework在“http://msdn.microsoft.com/en-us/library/dn605894(v=office.15).aspx”和“使用邮件,日历和联系REST API处理电子邮件,日历项目和联系人”中将O365与Web服务器应用程序集成在“ http://msdn.microsoft.com/en-us/library/dn605896(v=office.15).aspx

希望这有帮助,

干杯! 的Matthias