背景:
对于身份验证,我们使用 AWS Cognito。我们的项目包含一个 API 服务器和一个 Web 服务器。在客户端,当用户登录应用程序时,我们将用户名和密码发送到 cognito 实例,该实例返回 JWT 访问 token 。我们在 cookie 中设置访问 token 并将用户重定向到主页。在 http 服务器端,对于私有(private)页面的每个请求,我们都会检查 cookie 并验证 JWT 访问 token 。同样在 API 端,对于每个请求,我们都会检查 cookie 并验证访问 token 。
当用户从应用程序中注销时,我们会删除 cookie 并从 cognito 中注销。这是删除cookie的代码 -
function clearCookie(name: string, domain: string, path: string) {
const derivedDomain = domain || document.domain;
const derivedPath = path || "/";
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:01 GMT; domain=${derivedDomain}; path=${derivedPath}`;
};
问题:
当用户在退出后按下浏览器的后退按钮时会出现此问题。似乎当用户按下后退按钮时,页面与 cookie 一起从缓存中恢复。由于 JWT 访问 token 仍然有效,因此在用户按下后退按钮后,他们仍然可以进行 api 调用并导航应用程序。
有没有办法解决这个问题?我怎样才能删除cookie,以便按下后退按钮不会恢复cookie?我应该使用任何其他身份验证工作流程来克服这个问题吗?
最佳答案
HttpCookie httpCookie = default(HttpCookie);
int i = 0;
string cookieName = null;
int limit = Request.Cookies.Count - 1;
for (i = 0; i <= limit; i++)
{
cookieName = Request.Cookies(i).Name;
httpCookie = new HttpCookie(cookieName);
httpCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(httpCookie);
}
关于authentication - 用户退出 session 时如何正确删除 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59342165/