我正尝试使用EWS-java-api为使用android的活动目录身份验证库的office365用户使用oAuth2令牌获取EWS数据。类似于本文中为.net所显示的内容。 下面是代码:使用OAuth令牌验证和获取EWS数据
// Code to acquire token after registering the native application in Azure active directory
authenticationContext.acquireToken(<activity context>,
"<resource id: copied from the manifest file tag <resourceAppId> of Azure active directory after adding permission>",
"<Application id of the registered app in AAD>",
"<Application Redirect URI>", email, PromptBehavior.Always, "", AuthenticationCallback);
//We receive AuthenticationResult object containing authentication token in AuthenticationCallback onSuccess method and then call an async task to fetch EWS data
ExchangeService exchangeService = new ExchangeService();
exchangeService.setTraceEnabled(true);
exchangeService.getHttpHeaders().put("Authorization", "Bearer " + mAuthenticationResult.getAccessToken());
exchangeService.setUrl(URI.create("https://outlook.office365.com/EWS/Exchange.asmx"));
我能够取得OAuth凭证,但我不能够接收交换数据时,它使用下面的代码获取数据时给我的授权和禁止访问。
CalendarFolder calendarFolder = CalendarFolder.bind(service, WellKnownFolderName.Calendar);
findResults = calendarFolder.findAppointments(new CalendarView(startDate, endDate));
另外,我不确定我在azure门户中设置的配置。如果您可以告诉如何设置Azure AD应用程序以通过android中的oAuth身份验证获取EWS数据,那将非常好。
编辑:
下面是我的访问令牌声明:
这是我收到的访问令牌的JSON。并使用此访问令牌我得到的错误是401访问日历文件夹时未经授权的访问。
JSON: {
typ: "JWT",
alg: "RS256",
x5t: "RrQqu9rydBVRWmcocuXUb20HGRM",
kid: "RrQqu9rydBVRWmcocuXUb20HGRM"
}.
{
aud: "6ae5db95-0af3-45b6-afce-17851abc9d55",
iss: "https://sts.windows.net/06d03691-efd5-43c5-8ec9-81e57c75f63c/",
iat: 1480554267,
nbf: 1480554267,
exp: 1480558167,
acr: "1",
amr: [
"pwd"
],
appid: "410db643-4efc-4dac-8e6f-bbf05da561e1",
appidacr: "0",
e_exp: 10800,
family_name: "Dhingra",
given_name: "Surbhi",
ipaddr: "112.110.19.113",
name: "Surbhi Dhingra",
oid: "52c73152-0add-4e68-8d60-54c03a35a4b9",
platf: "1",
scp: "user_impersonation",
sub: "hUaeKxiMI-m7nNNo2c5kMYd501Blw5QQ9SNPnP1Ei_c",
tid: "06d03691-efd5-43c5-8ec9-81e57c75f63c",
unique_name: "[email protected]<onmicrosoft domain>.com",
upn: "[email protected]<onmicrosoft domain>.com",
ver: "1.0"
}.
错误日志:microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException:请求失败。请求失败。远程服务器返回错误:(401)未授权 at microsoft.exchange.webservices.data.core.request.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:74) W/System.err:at microsoft.exchange.webservices.data .core.request.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:158) W/System.err:microsoft.exchange.webservices.data.core.ExchangeService.bindToFolder(ExchangeService.java:504) at microsoft.exchange.webservices .data.core.ExchangeService.bindToFolder(ExchangeService.java:523) at microsoft.exchange.webservices.data.core.service.folder.CalendarFolder.bind(CalendarFolder.java:60) at microsoft.exchange.webservices.data .core.service.folder.CalendarFolder.bind(CalendarFolder.java:108)
能否请您分享您收到的特定错误消息以及出现在您的访问令牌中的声明?您可以使用这样的网站从您的原始访问令牌中提取声明:http://calebb.net/ 我最初的猜测是,访问EWS数据确实需要在您的客户端应用程序上进行一定程度的设置你还没有完成。我上面要求的信息应该有助于澄清这一点。 –
@ShawnTabrizi:感谢您的帮助,这是我获取访问令牌的JSON。并使用此访问令牌我得到的错误是401访问日历文件夹时未经授权的访问。 – Surbhi