asp.net - 令牌过期后如何立即将用户重定向到登录页面
问题描述
我试图在令牌过期后立即将用户重定向到登录页面,而不是在下次单击它现在的样子之后。我已经设定
PostLogoutRedirectUri, FrontChannelLogoutUri, IdentityTokenLifetime, AccessTokenLifetime
正确,并且在令牌到期后将用户重定向到登录页面工作正常。但这不是即时的,需要点击。有没有办法立即重定向用户?
解决方案
我遇到了类似的问题,可以展示我的解决方案:
一些解释性的词:
使用 cookie 身份验证,用户将获得一个包含身份验证票证的 cookie。票据由服务器加密并包含一个生命周期。每次发送请求时,都会发送安全票证,并由服务器评估生命周期。然后,如果剩余生命周期小于配置会话生命周期的一半,则重置身份验证票证中的生命周期。
我的做法:
知道这个过程,我想出的唯一解决方案是在客户端处理注销(以及在我的场景中会话更新)。一般的做法是启动一个JS计数器,统计到服务器配置的会话时间;在生命周期结束前 3 分钟显示续订弹出窗口,并在会话生命周期结束前一分钟重定向到登录页面。
以下是我使用的一些片段:
这是我所有模板的一部分:
jQuery(function{
@if (HttpContext.Current != null && HttpContext.Current.Session["timeOutValue"] != null)
{
@:var timeOutMinute = @HttpContext.Current.Session["timeOutValue"].ToString();
}
else
{
@:var timeOutMinute = 20;
}
localStorage.setItem("timeoutInMinutes", timeOutMinute)
sessionWarning(timeOutMinute);
});
这是我的函数处理计时器和更新对话:
function sessionWarning(timeoutMinutes) {
var warningTime = ((timeoutMinutes - 3) * 60 * 1000);
var sessionTimer = parseInt(localStorage.getItem("sessionTimer"));
if ((sessionTimer !== null) && (sessionTimer < ((timeoutMinutes * 60 * 1000) / 2))) {
warningTime = warningTime - sessionTimer;
}
else {
localStorage.setItem("sessionTimer", "0");
sessionTimer = 0;
}
clearTimeout(timer);
timer = setTimeout(function () {
jQuery("#modal-session-container").modal();
}, warningTime);
intervalTimer = setInterval(function () {
if (isNaN(parseInt(localStorage.getItem("sessionTimer")))) {
localStorage.setItem("sessionTimer", "0");
}
if (!isNaN(timer)) {
localStorage.setItem("sessionTimer", String(parseInt(localStorage.getItem("sessionTimer")) + 1000));
}
}, 1000);
}
我希望这有帮助!
推荐阅读
- python - 在运行时为云函数 GCP 重命名 python 函数 def
- javascript - 可点击的按钮和改变 div 的内容
- micro-frontend - 在选项卡下渲染 pilet
- c# - C# 代码中的 .bat 脚本,它一直试图逃避我的原始代码
- python - 如何使用python中的交叉表函数从数据框中绘制饼图
- python - 如何使用 Xarray 处理 OCO-2/Tropomi NETCDF4 文件的时间变量?
- python - sci.py 最小化 - 约束函数参数
- regex - Twitch 剪辑正则表达式
- java - 如果我们在 executorService 中传递线程在 Java 多线程中执行调用会发生什么
- adaptive-cards - 如何通过 Action.Http 获取 TextBlock 文本?