Как обработать ошибку молниеносного обновления oidc
У меня есть настройка с использованием аутентификации redux-oidc на сервере идентификации. Я могу войти в систему, и я вижу, что silenRenew работает, как и ожидалось, когда истекает токен.
Хотя есть одна проблема. Если я открою свой сайт и позволю компьютеру перейти в спящий режим, когда я вернусь после истечения срока действия, автоматическое обновление завершится с ошибкой:
Тайм-аут фрейма
Он не пытается снова, как только я просыпаюсь компьютер. Даже когда я перезагружаю страницу.
Это ожидаемое поведение?
Если да, то как правильно обращаться с этим, чтобы сайт не оставался мертвым?
Если нет, кто-нибудь имеет представление о том, что я могу делать неправильно?
1 ответ
Я столкнулся с подобной проблемой, поэтому я сделал обходной путь, который выглядит некрасиво, но все еще работает хорошо для меня, ищите комментарии в коде
this.userManager = new Oidc.UserManager(oidcSettings);
this.userManager.events.addAccessTokenExpiring(() =>
{
this.userManager.signinSilent({scope: oidcSettings.scope, response_type: oidcSettings.response_type})
.then((user: Oidc.User) =>
{
this.handleUser(user);
})
.catch((error: Error) =>
{
// Currently as a dirty work around (looks like problem with gluu server. Need to test with other IDP's as well)
// in order to get the new issued token I just calling getUser() straight after signinSilent().then() promise failing with frame time out
// https://github.com/IdentityModel/oidc-client-js/issues/362
this.userManager.getUser()
.then((user: Oidc.User) =>
{
this.handleUser(user);
});
});
});
Взгляните на журналы. Обычно он говорит вам, что не так. Во всех ситуациях, когда я сталкивался с этой ошибкой, это было связано с тем, что я пропустил перенаправление uris на сервере. Все, что вы настраиваете на клиенте, должно быть отражено на сервере, в противном случае любой обратный вызов (callback.html, popup.html и silent.html, например, из примеров IS), возобновит сеанс не удастся.