繁体   English   中英

EWS 的 OAuth 身份验证

[英]OAuth Authentication to EWS

我在获取 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 的根本原因。

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

谢谢

第 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 ", ...

第 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

希望这可以帮助,

干杯! 马蒂亚斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM