Я написал приложение SharePoint SPfx, размещенное в SharePoint Online, используя Microsoft GraphAPI для сбора информации о профиле пользователя, а также событий календаря. По документам Microsoft я объявил свои области действия в файле package-solution. json и одобрил запрос через страницу управления SharePoint APi. Я могу прочитать информацию о каждом профиле, однако, я получаю ошибку 403, когда пытаюсь получить доступ к событиям календаря, кроме своих собственных. Календарь пользователей не является закрытым, он открыт для всей организации.
Пакетное решение. json Запрос на разрешение
"webApiPermissionRequests": [
{
"resource": "Microsoft Graph",
"scope": "User.Read"
},
{
"resource": "Microsoft Graph",
"scope": "User.ReadBasic.All"
},
{
"resource": "Microsoft Graph",
"scope": "People.Read"
},
{
"resource": "Microsoft Graph",
"scope": "Calendars.Read"
}
]
}
Изображение, одобренное администратором
Экран утвержденных разрешений приложения
код запроса:
private _searchUserCalendar(keyword: string): Promise<any[]> {
console.log("connection to GraphAPI event domain")
return new Promise<any[]>((resolve, reject) => {
this._context.msGraphClientFactory.getClient()
.then((client: MSGraphClient): void => {
client
.api(`/users/${keyword}/calendar/events`) // The api i.e> /me | /users
.version('v1.0')
.select("showAs,start,subject, end")
.top(5)
.get((error, response: any, rawResponse?: any) => {
if (error) {
console.log("ooops somethign went wrong get events",error);
reject(error);
}
var users:Array<any>=new Array<any>();
// Map the JSON response to the output array
if (response != null && response != undefined) {
console.log(response);
response.value.map((item: any) => {
console.log("found events for:", item)
}); // mapping over users
}
resolve(users);
});
});
});
}
Ответ об ошибке
{error: {code: "ErrorAccessDenied", message: "Access is denied. Check credentials and try again.",…}}
error: {code: "ErrorAccessDenied", message: "Access is denied. Check credentials and try again.",…}
code: "ErrorAccessDenied"
message: "Access is denied. Check credentials and try again."
innerError: {request-id: "5dca3d4f-ab4c-4237-8ff4-78d8cacbd43b", date: "2020-01-16T19:05:26"}
request-id: "5dca3d4f-ab4c-4237-8ff4-78d8cacbd43b"
date: "2020-01-16T19:05:26"
Я перепробовал все любая помощь будет принята с благодарностью.
- Я проверил мой запрос на графическом обозревателе, и он работал нормально
- Я удалил / переустановил приложение
- Я отклонил и повторно утвердил запрос разрешений на панели управления API
- Я изменил URL-адрес запроса с использования идентификатора пользователя на использование электронной почты (работал только для моего профиля, но по-прежнему не работал ни для кого другого)
- У меня были пользователи, которые делились со мной своим календарем и давали разрешения на чтение / запись, но все равно не работали, потому что это разрешение определяется приложением c, а не делегировано пользователем.