Пытаясь реализовать ADAL (Azure AD) в Javascript, продолжайте получать петли входа / перенаправления - PullRequest
0 голосов
/ 04 марта 2019

Итак, мне нужно создать календарь в формате html, который получает события из Outlook, а затем развернуть его как пользовательскую страницу в Sharepoint, чтобы его можно было включить в качестве веб-части / iframe в семейства сайтов.

Проблема в том, что я пытался добавить защиту ADAL, потому что вам нужно войти в систему и отправить токен в Microsoft Exchange Online API для получения событий календаря и т. Д. Чтобы отобразить часть календаря, яиспользуя FullCalendar.io.

Теперь я продолжаю получать цикл входа / перенаправления, который никогда не заканчивается.Кто-нибудь видит ошибку в коде?Вот оно:

var $this = this;

$(document).ready(function() {
debugger;

window.config = {
      tenantId: {tenant},
      clientId: {clientid},
      popUp: true,
      callback: callbackFunction,
      redirectUri: {custom aspx page URL on our Sharepoint},
      cacheLocation: 'localStorage'
};

var authenticationContext = new AuthenticationContext(config);

authenticationContext.handleWindowCallback();

function callbackFunction(errorDesc, token, error, tokenType) {
  alert('callbackFunction reached!');
}
var items = null;

if (authenticationContext.TokenCache) {
  items = authenticationContext.TokenCache.ReadItems();
}

if (authenticationContext['_user']) {
  authenticationContext.acquireToken(config.clientId, function (errorDesc, token, error) {
    if (error) { //acquire token failure
      if (config.popUp) {
          // If using popup flows
          authenticationContext.acquireTokenPopup(config.clientId, null, null,  function (errorDesc, token, error) 
{});
      }
      else {
      // In this case the callback passed in the Authentication request constructor will be called.
          authenticationContext.acquireTokenRedirect(config.clientId, null, null);
      }
    }
    else {
      //acquired token successfully
      // alert('token success');
      $this.DisplayEvents(token);
    }
  });
}
else {
    // Initiate login
    authenticationContext.login();
}
 });

 function DisplayEvents(adalToken) {
$('#calendar').fullCalendar({
  header: {
    left: 'prev,next today',
    center: 'title',
    right: 'month,agendaWeek,agendaDay,listWeek'
  },
  navLinks: true, // can click day/week names to navigate views
  editable: true,
  eventLimit: true, // allow "more" link when too many events
  events: function(start, end, timezone, callback) {
    var headers = new Headers();
    var bearerToken = "Bearer " + adalToken;
    headers.append('Authorization', bearer);
    var options = {
      method: 'GET',
      headers: headers
    };
    var exchangeEndpoint = 'https://outlook.office.com/api/v2.0/me/events';

    fetch(exchangeEndpoint, options).then(function (response) {
      alert('Response data from successful call: ' + response);
    });
  }
});
 }  

Таким образом, код получает «получить токен», а затем последний «остальное», поэтому вызывается «$ this.DisplayEvents (token)»!Однако после получения токена приложение продолжает перенаправлять навсегда… URL-адрес ответа в моей регистрации приложения Azure AD также является значением redirectURL window.config, иначе я получу сообщение об ошибке, в котором URL-адрес ответа несоответствие между запросом и Azure.

Кто-нибудь знает, где что-то идет не так?

1 Ответ

0 голосов
/ 06 марта 2019

Я могу воспроизвести вашу проблему на моей стороне, используя ваш код.Если вы используете authContext.getCachedUser () для проверки состояния входа, проблема с перенаправлением исчезнет.

if (authContext.getCachedUser()) {
        authContext.acquireToken(config.clientId, function (error, token) {
            if (error) { //acquire token failure
                if (config.popUp) {
                    // If using popup flows
                    authContext.acquireTokenPopup(config.clientId, null, null, function (errorDesc, token, error) { });
                }
                else {
                    // In this case the callback passed in the Authentication request constructor will be called.
                    authContext.acquireTokenRedirect(config.clientId, null, null);
                }
            }
            else {
                //acquired token successfully
                // alert('token success');
                alert(token);
            }
        });
    }
    else {
        // Initiate login
        authContext.login();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...