如何处理oidc无声续订错误

时间:2018-01-03 22:54:59

标签: reactjs redux oidc oidc-client-js

我有一个针对身份服务器进行redux-oidc身份验证的设置。 我可以登录,我可以看到当令牌过期时,silenRenew按预期工作。

但是有一个问题。 如果我打开我的网站并让计算机进入睡眠状态,当我在有效期后回来时,静默续订失败并出现此错误:

Frame window timed out

一旦我唤醒电脑,它就不会再试一次。甚至在我重新加载页面时都没有。

这是预期的行为吗?

如果是这样,处理这个问题的正确方法是什么,这样网站就不会死?

如果没有,有没有人知道我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

我遇到过类似的问题,所以我做了一个看起来很丑陋的解决方案,但对我来说仍然可以正常工作,在代码中寻找评论

 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);
                            });
                    });
            });

答案 1 :(得分:0)

看看日志。它通常会告诉您出了什么问题。在所有情况下,我都遇到此错误,原因是我错过了服务器上的重定向uri。您在客户端上设置的所有内容都必须反映在服务器上,否则,任何回调(例如IS示例中的callback.html,popup.html和silent.html),会话更新都将失败。