Конечная точка безопасности 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.