我在使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终结点的令牌(它将使受众检查失败)。
现在,如果您想进行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”,...
第2部分...如何:使用“ http://msdn.microsoft.com/en-us/library/dn605894(v=office.15).aspx”处的“通用同意框架”和“ http://msdn.microsoft.com/en-us/library/dn605896(v=office.15).aspx中的使用邮件,日历和联系人REST API来处理电子邮件,日历项和联系人”,将O365与Web服务器应用程序集成]“
希望这会有所帮助,
干杯!马赛厄斯
在您的azure应用中,添加权限以交换“ full_access_as_app”,并授予管理员同意。并使用范围var ewsScopes = new string[] { "https://outlook.office.com/.default" };
获取令牌这肯定会对您有帮助。