根据本教程,我将使用Identity Server 3(Implicit Flow)构建一个angular 5应用程序: https://www.scottbrady91.com/OpenID-Connect/Silent-Refresh-Refreshing-Access-Tokens-when-using-the-Implicit-Flow (他使用身份4)
到目前为止,一切正常,除了无提示刷新页面的signinSilentCallback调用。我的页面如下:
<head>
<title></title>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.3.0/oidc-client.js"></script>
<script>
new UserManager().signinSilentCallback()
.catch((err) => {
console.log(err);
});
</script>
</body>
我最初是直接参考odic-client.js文件作为他的示例,但是无论哪种方式,我都会不断遇到以下错误:
VM861silent-refresh.html:7未捕获的ReferenceError:未定义UserManager 在VM861 Silent-refresh.html:7
不知道我缺少什么,为什么它不能创建对UserManager对象的引用。 .js已加载,正如我在Chrome的“网络”标签中看到的文件一样。令牌到期后,“网络”标签中会显示“ silent-refresh.html”页面以及oidc-client.js文件。
答案 0 :(得分:1)
这对我有用:
新的 Oidc .UserManager()。signinSilentCallback() .catch((err)=> { console.log(err); });
答案 1 :(得分:0)
我让它工作了,我必须做两件事:
在Identity Server客户端中,我必须设置filter(model.Member.table_id == model.Package.id)
,这很有意义,因为我正在执行无提示刷新,所以我不需要常量。
在角度方面,在调用signinSilentCallback()之前,我必须运行self.addEventListener('sync', function(event) {
if (event.tag == 'myFirstSync') {
event.waitUntil(doSomeStuff());
}
});
那之后,我看到令牌刷新了。