ADAL JS - получение токена: операция обновления токена не выполнена из-за тайм-аута
Я работаю над тем, чтобы использовать AD для аутентификации и авторизации нескольких приложений, и в настоящее время я изучаю, как реализовать этот процесс.
Это для веб-браузера для потока веб-приложений.
Я создаю экземпляр AuthenticationContext и использую его для входа, и это нормально работает. (Организация кода упрощена для демонстрационных целей)
this.adal = new AuthenticationContext({
tenant: this.tenantId,
clientId: this.clientId,
redirectUri: this.redirectUri,
callback: this.loginCallback,
popUp: true
});
this.adal.login();
Именно когда я пытаюсь приобрести токен, поведение становится подозрительным. Уместно сказать, что реестр этого приложения в AD имеет разрешение "Вход и чтение профиля пользователя" в Microsoft Graph API.
this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
console.log(error);
console.log(token);
});
Ошибка записывается в консоль следующим образом: "Ошибка обновления токена из-за тайм-аута"; В то время как токен записывается как нулевой объект. Краткий взгляд на вкладку "Сеть" при просмотре страницы с помощью Chrome показывает такой ресурс:
authorize?response_type=token&client_id=xxxxx&resource=xxxxx&redirect_uri=http://localhost:8080(.....)
Статус для указанного ресурса - 302.
Есть какие-нибудь подсказки? Спасибо!
1 ответ
Хорошо... кажется, что я понял это, с небольшой помощью из этой статьи нажмите на статью, и этот щелчок для очень интересной информации
Я заменил следующий бит кода в обратном вызове входа в систему
this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
console.log(error);
console.log(token);
});
за это:
var cachedToken = this.adal.getCachedToken(client_id_goes_here);
if (cachedToken) {
this.adal.acquireToken("https://graph.microsoft.com", function(error, token) {
console.log(error);
console.log(token);
});
}
И, наконец, просто добавьте эту строку кода в функцию, которая запускается после перенаправления метода acquToken на страницу:
this.adal.handleWindowCallback();
Надеюсь, что это полезно для тех, кто занимается этой проблемой!