在我的应用程序上,我有一个超时功能,所以当用户空闲 X 分钟时,我想从 Identity Server 注销。
我的第一次尝试是手动创建呼叫,而无需用户导航到 Logout 控制器。
这段代码看起来像这样(Angular + TS):
this.userManager
.createSignoutRequest({ id_token_hint: this.user && this.user.id_token })
.then(signout_request => {
this.http
.get(signout_request.url, {
responseType: 'text',
headers: new HttpHeaders().set(InterceptorSkipHeader, '') // Ignores token http-interceptor
})
.subscribe(_ => {
this.userManager.removeUser().then(_ => {
window.location.href = '/timeout'; // Navigate to page that informs user has been timed out
});
});
});
我可以看到它使用 id_token_hint 和正确的 redirect_url 进入 endsession 端点,但是当我尝试重新登录应用程序时,它给了我一个令牌,而没有再次询问我的凭据,这违背了它的目的。
oidc-client-js 库中的常规注销功能可以正常工作。
this.userManager
.signoutRedirect()
.then(res => {
if (!environment.production) {
// console.log('Redirection to signout triggered.', res);
}
})
唯一需要注意的是,我想向用户提供其他信息,说明他们由于不活动而超时,我不知道怎么做。
此函数接受 apost_logout_redirect_uri
和 astate
作为参数,但我无法成功地在我的 IdentityServer 上获取它们(我还是 .Net 的新手)。
这是错误的方法吗?我是否应该使用 /timeout 路由之类的方式将用户导航回我的 Angular 应用程序以显示此消息?
感谢您的输入