0

我在获取 OAuth 凭据以在 Office 365 中使用 EWS 时遇到问题。在较高级别上,我正在编写一个 SharePoint 2013 应用程序,并且我正在尝试访问用户在 Exchange 中的邮箱数据。我确实通过将 OAuth 代码换成硬编码的用户名和密码来验证我的 EWS 代码是否“正确”,并且效果很好。

我使用下面的代码获得了一个令牌,但是当我尝试访问用户的收件箱时,我得到了 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);
}

我想得越多,我就越想知道我的“应用程序”是否需要交换服务器上的权限,以及这是否是 401 的根本原因。

有没有人真的这样做过?我觉得这应该是可能的,但我似乎找不到很多关于这个过程的文档。

谢谢

4

2 回答 2

1

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

希望这可以帮助,

干杯! 马蒂亚斯

于 2014-03-07T18:59:27.530 回答
1

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

现在,如果要进行身份验证,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 ", ...

于 2014-03-07T18:56:20.563 回答