Как обработать ошибку молниеносного обновления 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), возобновит сеанс не удастся.

Другие вопросы по тегам