Конечная точка безопасности Graph, генерирующая HTTP 403 с ADALJS
Попытка создать приложение на стороне клиента с помощью Microsoft Graph Security API.
Мы предоставили гранты на портале Azure, предоставив согласие администратора, и JWT показывает наличие областей (фрагмент ниже):
"scp": "Calendars.Read MailboxSettings.Read offline_access People.Read profile SecurityEvents.Read.All SecurityEvents.ReadWrite.All User.Read User.Read.All",
Вот как мы запрашиваем токен:
// acquire token for ms graph. the service we're acquiring a token for
// should be the same service we call in the ajax request below
authContext.acquireToken('https://graph.microsoft.com', (error, token) => {
// Handle ADAL Error
if (error || !token) {
printErrorMessage('ADAL Error Occurred: ' + error);
return;
}
this.token = token; //update our data with the token
});
Но когда мы достигли конечной точки с помощью веб-вызова, мы все еще получаем 403
без возвращаемых данных:
$.ajax({
type: "GET",
url: "https://graph.microsoft.com/v1.0/security/alerts",
headers: {
'Authorization': 'Bearer ' + this.token,
}
}).done(async (data) => {
console.log(data);
}).fail(() => {
console.log('Error getting top 10 people!');
});
И вот основная ошибка (через Почтальона):
{
"error": {
"code": "UnknownError",
"message": "Auth token does not contain valid permissions or user does not have valid roles.",
"innerError": {
"request-id": "6411dbc9-eebb-4522-b789-62ab5f754d0c",
"date": "2019-04-23T15:17:12"
}
}
}
Редактировать: у пользователя, обращающегося к приложению, есть роль каталога "Security reader".
Будем очень благодарны любой помощи.:)
2 ответа
Похоже, что ваше приложение имеет правильные области действия, но пользователь, запрашивающий предупреждения из API безопасности Microsoft Graph, не имеет Security reader
роль в Azure AD.
Чтобы добавить роли пользователям, войдите на портал Azure в качестве администратора клиента и выберите Azure Active Directory
лезвие> Users
> выберите имя пользователя> Directory Role
> и затем выберите Add role
,
Как только пользователь получит доступ к информации о безопасности, он сможет получать оповещения через API безопасности Microsoft Graph.
Источник: https://docs.microsoft.com/graph/security-authorization
Я работал за кулисами с некоторыми ресурсами MS DEV, и мы считаем, что мы выяснили, почему это не работает.
Взято из электронного письма:
Неявное предоставление через AAD по умолчанию использует response_mode= фрагмент. После изменения режима ответа на response_mode=form_post токен id и токен доступа, если требуется, отправляются в виде запроса POST и содержат утверждение wids, которое позволяет использовать конечные точки безопасности Graph API.
Предложенный обходной путь заключается в создании приложения на стороне сервера, которое будет перехватывать POST-запрос с ролями, а затем использовать его для вызова API Graph Graph.
Это работает, но в основном означает, что неявные клиентские приложения потока по существу несовместимы с Graph Secuirty API. Супер расстраивает и крайне сложно отследить из документации.
Надеемся, что есть какой-то другой механизм, который может придумать MS.