2017-02-14 5 views
2

Я использую Javascript (без углового), чтобы добавить AAD-аутентификацию в одностраничное веб-приложение. Исходный логин работает нормально, но через час истекает срок действия токена, и я не могу его обновить с помощью purchaseToken. Я пробовал называть метод полученияToken, когда я все еще подключился к моему идентификатору clientID, и он работает нормально, но после того, как токен истекает, я не могу его возобновить. Он терпит неудачу в том, что операция обновления токена завершилась неудачно из-за таймаута.Невозможно обновить токен с adal.js

После истечения срока действия маркера, я побежал это:

// ADALContext created from calling new AuthenticationContext 
// passed in same clientID to acquire token as to create ADALContext 
ADALContext.acquireToken(clientID, function (error, token) {console.log(error, token)}) 

Я включил oauth2AllowImplicitFlow в AAD.

"keyCredentials": [], 
    "knownClientApplications": [], 
    "logoutUrl": null, 
    "oauth2AllowImplicitFlow": true, 
    "oauth2AllowUrlPathMatching": true, 

Не знаете, на каком этапе мне не хватает. Спасибо!

Редактировать: Сразу после истечения срока действия маркера, если я запустил purchaseToken (clientID, func), я получаю «Пользовательский логин». Тем не менее, если я вызываю getCachedUser, я возвращаю пользователя, после которого call приобретаетToken возвращает ошибку тайм-аута.

+0

Этот токен доступа, который у вас есть, имеет продолжительность жизни 1 час. По истечении срока его действия, вызов приобретается, чтобы перейти к Azure AD, чтобы получить новый токен доступа, и это тот шаг, который он терпит неудачу. Трудно диагностировать конкретную проблему без дополнительной информации, вы можете получить трассировку скрипача и проверить ошибку, которую вы возвращаете из STS и отправить обратно. –

+0

Вы имеете в виду заголовок ответа с URL-адреса запроса «https: //login.microsoftonline.com/microsoft.onmicrosoft.com/oauth2/authorize? Response_type = token & client_id = ....»? Если это так, я не получаю ошибку, насколько я могу судить. Тем не менее, если я дам неверный идентификатор клиента в процессе полученияToken, я получаю следующее: «Location: http: // /# error = invalid_resource ...». Может быть, я смотрю не туда? Я добавил несколько дополнительных комментариев к моему вопросу выше. Благодаря! –

+0

Исправлена ​​проблема с добавлением вызова в ADALContext.handleWindowCallback() :) –

ответ

1

На самом деле, adal для js будет кэшировать информацию для входа в хранилище сеансов или локальное хранилище в браузере, зависит ваша конфигурация в коде. Вы можете использовать хром разработают инструмент, чтобы иметь взгляд этой таблицы: enter image description here

Так cachaed user декодируются из adal.idtoken. Таким образом, вы можете получить кэшированного пользователя. И в соответствии с исходным кодом acquireToken, он проверяет, существует ли пользователь входа в систему, прежде чем обновлять токен доступа, что приведет к возникновению проблемы User login is required.

Чтобы обойти эту проблему, вы можете запустить функцию getCachedUser() перед запуском acquireToken() для обновления токена доступа.

+0

Если я запустил getCachedUser() до полученияToken(), я верну маркер нулевого значения с «Операцией обновления токена из-за таймаута». Есть ли способ проверить, не скопилось ли время cookie AAD в кластере? Я не думаю, что это должно произойти только через 1 час. Благодаря! –

+0

Я не думаю, что мы можем видеть такой сеанс входа в систему или статус cookie на сервере AAD IDP. Тем не менее, я нашел ту же проблему с вами в Github, вы можете попробовать решение внизу https://github.com/AzureAD/azure-activedirectory-library-for-js/issues/391 –

+0

Это сделало трюк, спасибо вы! –

0

просто используйте функцию clearCache(), а затем вызовите acuireToken, наблюдаемый, и у вас будет новый токен. И вы сможете снова проверить подлинность!

Смежные вопросы