Как я могу проверить, авторизован ли токен, переданный команде POST?

#angular #microsoft-graph-api #unauthorized

#angular #microsoft-graph-api #несанкционированный

Вопрос:

Мое приложение находится в angular 8 с использованием MSAL версии 2.0. Приложение запрашивает учетные данные office 365 пользователя, регистрирует их, а затем позволяет им создать событие в своем календаре. Пользователь успешно зарегистрирован, токен получен, но при попытке создать событие в календаре с помощью MS Graph Rest API система выдает несанкционированную ошибку 401.

Приведенная ниже функция входа в систему возвращает сообщение об успешном входе в систему при входе пользователя в систему. Значение accessToken равно null, но idToken имеет значение. Должен ли accessToken иметь значение? Кроме того, ошибка 401 вызвана тем, что в команде loginPopup требуется область видимости?:

 loginPopup(request) {
        return super.loginPopup(request)
            .then((authResponse) => 
            this.broadcastService.broadcast("msal:loginSuccess", authResponse);
            return authResponse;
        })
            .catch((error) => {
            this.broadcastService.broadcast("msal:loginFailure", error);
            this.getLogger().error("Error during login:n"   error.errorMessage);
            throw error;
        });
    }
  

Сообщение об ошибке:
зона-evergreen.js: 1042 «POST https://graph.microsoft.com/v1.0/me/events 401 (Несанкционированный)»

Щелчок по ссылке https://graph.microsoft.com/v1.0/me/events в этом сообщении об ошибке показано: https://login.microsoftonline.com//oauth2/v2.0/authorize?response_type=id_tokenamp;scope=openid profileamp;client_id=amp;redirect_uri=https://myApp.abc.com/amp;state==amp;nonce=ad9d4ce5-7676-5515-a36c-7b2b3c70d366amp;client_info=1amp;x-client-SKU=MSAL.JSamp;x-client-Ver=1.4.2amp;login_hint=sales1@abc.comamp;client-request-id=amp;response_mode=fragmentamp;sso_reload=true

Комментарии:

1. Не могли бы вы поделиться идентификатором запроса, меткой времени и полным ответом на ошибку для неудачного запроса?

2. Для вызова Microsoft Graph вам нужен токен доступа. Пожалуйста, ознакомьтесь с методом, использующим msal.js : learn.microsoft.com/en-us/azure/active-directory/develop /.

3. Если мой ответ полезен для вас, вы можете принять его как ответ (нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный.). Это может быть полезно для других участников сообщества. Спасибо 🙂

Ответ №1:

Это потому, что вы просто отправляете запрос на вход в систему, а не запрашиваете получение токена доступа. Ваш response_type=id_token , так что вы получили только токен id.

Для вызова этого API требуется наличие токена доступа, поскольку вы вызываете /me конечную точку, поэтому вам необходимо получить токен пользователя в интерактивном режиме:

 const requestObj = {
      scopes: ["user.read"]
  };

  this.authService.acquireTokenPopup(requestObj).then(function (tokenResponse) {
      // Callback code here
      console.log(tokenResponse.accessToken);
  }).catch(function (error) {
      console.log(error);
  });