You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core网站中通过AWS Cognito实现15分钟闲置超时登出?

ASP.NET Core + AWS Cognito 实现15分钟无交互自动登出的问题

我在ASP.NET Core网站中使用AWS Cognito进行用户认证,注册、登录、登出功能均正常运行,但希望实现用户15分钟无交互时自动登出。

目前已通过设置网站Cookie过期时间,实现了15分钟后用户从网站登出,但用户会立即跳转至Cognito,无需验证凭据便自动重新登录并返回网站,相当于并未真正登出。相关代码如下:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
    options.ExpireTimeSpan = TimeSpan.FromMinutes(1); // 后续会重置为15
    options.SlidingExpiration = true;
    options.Cookie.HttpOnly = true;
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    options.Cookie.SameSite = SameSiteMode.Lax;
})
.AddOpenIdConnect(options =>
{
    options.NonceCookie.SameSite = SameSiteMode.Lax;
    options.CorrelationCookie.SameSite = SameSiteMode.Lax;
         
    options.ResponseType = OpenIdConnectResponseType.Code;
    ...

我打算尝试将Cognito刷新令牌的过期时间设置为最小值1小时,但这仍比我需要的15分钟长得多(设置access token和id token过期时间为5分钟无效,因为它们会自动刷新)。

目前想到两个方案:

  • 方案1:在Web应用中设置计时器,用户有交互时重置计时器;若计时器归0,则调用Cognito API撤销刷新令牌或执行全局登出(此Cognito用户池仅用于该单一应用,全局登出不会引发问题)。但该方案繁琐且容易出错。
  • 方案2:用户每次请求页面时,检查其上次访问页面的时间间隔,若超过15分钟则重定向至Cognito登出页面。但该方案可能会被有意图的攻击者绕过,因为它需要浏览器跳转至Cognito网站才能完成登出。

是否存在更简便的第三种方法?

补充信息:
根据GlobalSignOut文档描述,即使实现了GlobalSignOut或撤销刷新令牌,用户仍可在长达1小时内自动重新登录:

Signs out users from all devices. It also invalidates all refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period.

另有用户尝试方案1后发现,Cognito的托管UI Cookie确实会在1小时内让用户自动重新登录。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:37:31