Ms office 对EWS的OAuth身份验证

Ms office 对EWS的OAuth身份验证,ms-office,sharepoint-2013,office-2013,Ms Office,Sharepoint 2013,Office 2013,我在获取OAuth凭据以在Office 365中使用EWS时遇到问题。在较高级别上,我正在编写SharePoint 2013应用程序,并尝试在Exchange中访问用户的邮箱数据。我确实通过将OAuth代码替换为硬编码的用户名和密码来验证我的EWS代码是“正确的”,并且它工作得非常好 我用下面的代码得到了一个令牌,但是当我试图访问用户的收件箱时,我得到了一个401。为了简洁起见,我将其省略,但在访问收件箱之前,我将把令牌传递到一个新的OAuthCredentials对象中 string acsU

我在获取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);
}
string acsUrl=”https://accounts.accesscontrol.windows.net/";
使用(WebClient exchangeTokenClient=new WebClient())
{
ExchangeTokeClient.BaseAddress=acsUrl;
NameValueCollection requestParams=新的NameValueCollection();
添加(“授权类型”、“客户端凭据”);
requestParams.Add(“客户机id”,“@”);
Add(“client_secret”和“”);
requestParams.Add(“资源”,“00000002-0000-0ff1-ce00-000000000000/outlook.office365.com@”);
ExchangeTokeClient.Headers.Add(“授权”、“承载人”+((SharePointAcsContext)spContext.UserAccessTokenForSPAppWeb);
字节[]responseBytes=exchangeTokenClient.UploadValues(“/tokens/OAuth/2”,“POST”,requestParams);
字符串响应=Encoding.UTF8.GetString(responseBytes);
}
我想得越多,我就越想知道我的“应用程序”是否需要exchange服务器上的权限,以及这是否是401的根本原因

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

谢谢

第一部分: 嗨,乔,你不能这样做。您似乎试图将SharePoint令牌重新播放到Exchange端点。Exchange将拒绝SharePoint令牌,因为该令牌不适用于Exchange终结点(访问群体检查失败)

现在,如果您想进行身份验证,则要使其正常工作,Exchange的唯一方法是使用我们在SPC上宣布的新OAuth2模型。您可以从我在“”上的会话演示中获得更多详细信息(我相信几天后我们会发布幻灯片)。我还可以推荐看三个文档,即:使用公共同意框架的身份验证和授权:“,…”

第2部分 ... 如何:在“”处使用通用同意框架将O365与web服务器应用程序集成,并在“”处“使用邮件、日历和联系人REST API处理电子邮件、日历项目和联系人”

希望这有帮助

干杯! 马蒂亚斯