ASP.NET Core 1.0 - MVC 6 - Cookie 过期

2024-03-28

UPDATE:

这绝对不是 RC1 中的错误。 cookie 设置与默认的 UserManager 和 UserStore 一起使用,因此它一定与我的 UserManager/UserStore 有关,我已经监督过。我基本上使用这里的实现:https://github.com/jesblit/ASPNET5-FormAuthenticationLDAP https://github.com/jesblit/ASPNET5-FormAuthenticationLDAP

原帖:

我在持久登录方面遇到问题。无论我如何配置 cookie,30 分钟后,用户都会自动注销(无论用户与应用程序交互多少)。

我设置我的应用程序:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCaching();
        services.AddSession(options => {
            options.IdleTimeout = TimeSpan.FromDays(1);
            options.CookieName = ".MySessionCookieName";
        });

        services.AddEntityFramework()
            .AddNpgsql()
            .AddDbContext<Model1>(options =>
                options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"]));

        services.AddIdentity<MinervaUser, MinervaRole>(options => {
            options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(1);
            options.Cookies.ApplicationCookie.SlidingExpiration = true;
            options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;

        })
            .AddUserStore<MinervaUserStore<MinervaUser>>()
            .AddRoleStore<MinervaRoleStore<MinervaRole>>()
            .AddUserManager<MinervaUserManager>();

        services.AddMvc();
    }

And:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

            try
            {
                using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
                    .CreateScope())
                {

                }
            }
            catch { }
        }
        app.UseIISPlatformHandler(options => { options.AuthenticationDescriptions.Clear(); options.AutomaticAuthentication = true; });
        app.UseSession();
        app.UseIdentity();
        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

登录操作是:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
            if (result.Succeeded)
            {

                _logger.LogInformation(1, "User logged in.");
                return RedirectToLocal(returnUrl);
            }
...

我正在使用默认的 SignInManager。如前所述,我在 Startup.Configure 和 Startup.ConfigureServices 中设置的过期超时根本没有效果。登录 -> 30 分钟 -> 自动注销:(

怎样做才能延长这个时间呢?

(之间:自定义用户、用户管理器、用户存储不会以任何方式干扰 Cookie,它们“只是”验证凭据(它们应该做什么;)))


TL;DR:如果您有自定义用户管理器,请务必实现 GetSecurityStampAsync、UpdateSecurityStampAsync 并将 SupportsUserSecurityStamp 设置为 true。


这个问题的解决方案非常简单(但我在文档中没有找到它)。由于默认实现(创建新的 ASP MVC6 应用程序...)有效,我检查了它们的数据库表并找到了安全标记(我没有实现)。根据这个问题的答案ASP.NET Identity 的 IUserSecurityStampStore 接口是什么? https://stackoverflow.com/questions/19487322/what-is-asp-net-identitys-iusersecuritystampstoretuser-interface该邮票每 30 分钟重新验证一次,这出人意料地适合我的问题。所以,我所做的就是扩展我自己的 UserManager

public class MinervaUserManager:UserManager<MinervaUser> 
// Minerva being the name of the project
{
...
    public override bool SupportsUserSecurityStamp
    {
        get
        {
            return true;
        }
    }
   public override async Task<string> GetSecurityStampAsync(MinervaUser user)
    {
        // Todo: Implement something useful here!
        return "Token";
    }

    public override async Task<IdentityResult> UpdateSecurityStampAsync(MinervaUser user)
    {
        // Todo: Implement something useful here!
        return IdentityResult.Success;
    }

这些虚拟人在每次更新时总是返回相同的 SecurityStamp 和“成功”。这与完全没有 SecurityStamps 一样安全,可以防止注销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 1.0 - MVC 6 - Cookie 过期 的相关文章

随机推荐

  • curl_getinfo($ch, CURLINFO_CERTINFO) 为空

    我有 PHP 7 2IUS https ius io GettingStarted 存储库 但默认 PHP CentOS 7 x 上的行为相同 Code domain google com ch curl init curl setopt
  • 404 页面适用于本地主机,但不适用于生产(Azure Web App)

    我的本地主机上有一个 404 页面 运行得很好 但是 当它被推送到 Azure Web App 时 却没有 我最初是通过发布工具推送它的 现在我使用从 Github 分支推送的内置功能 我有以下内容网络配置
  • “Line2D”对象没有属性“kind”

    我刚刚开始学习 pandas 当时我想制作 2013 年车站平均值的条形图 以创建一个fig ax plt subplots 对象并将绘图添加到创建的 ax 我在运行这部分代码时收到此错误 Line2D 对象没有属性 kind fig ax
  • 无法在 Tkinter 中禁用自动换行

    我正在尝试在禁用自动换行和水平滚动条的文本窗口中写入 如下所示 root Toplevel root geometry dx d 0 0 350 400 af Frame root chtext Text af width 45 wrap
  • 2.5升级后无法编辑Streamfield页面

    我在本地开发中有一个使用 Streamfield 和 2 个自定义 StructBlock 字段的站点 在 2 4 中工作正常 但升级到 2 5 后 我可以在管理中正常创建页面 但当我保存后在管理中编辑该页面时 会出现错误 我也尝试使用新的
  • 如何将div转换为图像?

    我有一个 div 我需要制作这个 div 的图像并发送给服务器 有什么方法可以使用 Angular 7 来做到这一点吗 我尝试搜索库但没有结果 所有解决方法都使用原生 JS 要将 HTML 内容保存到图像中 您需要使用HTML2CANVAS
  • 在 rabin-karp 滚动哈希中选择基数和模素数

    哈希函数的解释为维基百科 http en wikipedia org wiki Rolling hash 它说 a 和 n 的选择对于获得良好的散列至关重要 并引用了一篇感觉不相关的线性同余生成器文章 我无法弄清楚这些值是如何选择的 有什么
  • driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS) 不起作用

    driver manage timeouts implicitlyWait 10 TimeUnit SECONDS 上面的隐式等待代码在 Google Chrome 上对我不起作用 我尝试过使用 selenium 2 47 和 2 53 1
  • 如何在 conda 环境中启动 exe

    我在 Windows 10 中使用 vscode 作为代码编辑器 并希望找到一种简单的方法来使用正确的 conda env 启动它以进行调试 目前 我必须打开命令提示符 然后激活 conda env 然后将 vscode 的快捷方式粘贴到提
  • 直接渲染CGImage(而不是UIImage)?

    我正在做一个CGImage func otf gt CGImage 这是渐变上的贝塞尔蒙版 所以 the path let p UIBezierPath p moveTo etc the mask let m CAShapeLayer se
  • Crystal Reports 10 命令对象更改数据源位置

    我已经在 Crystal Report 中使用了命令对象 现在我需要更改数据源 我已按照知识库文章 c2016958 中的说明进行操作 下载 解压缩并应用了 cr10win en zip 和 dbex10win en zip 但我的连接仍然
  • 访问reactjs中的viewbag属性

    我正在开发一个Web应用程序 我使用reactjs和MVC c 我想知道 jsx 是否包含在 cshtml 中 是否可以访问 jsx 中的 viewbag 属性 我想要将一个对象或 id 传递给 jsx 并将其呈现在 UI 中 ViewBa
  • 如何制作单独的角材料步进器标题和内容?

    我正在用有角度的材料做一个垂直步进器 问题是这个步进器将每个步骤的内容放在步骤标题下方 因此如果有很多步骤 它看起来会很糟糕 因为你必须滚动 我的想法是将标题与内容分开 这样它看起来更像是侧导航 但具有角度材质功能 这是我现在所拥有的 内容
  • 从 Java Applet 调用 Javascript 函数

    我在 HTML 页面中有一个 Java Applet 我需要让小程序调用某个 Javascript 函数来通知 HTML 页面某些事件 我目前调用 JavaScript 函数的方式是 getAppletContext showDocumen
  • Clojure 哈希映射到 xml

    我正在尝试将以下映射转换为 xml 任何具有向量值的键都需要为向量中的每个元素重复 xml 中的键 use clojure xml defn map to xml2 k v cond nil k for e a v tag e conten
  • 使用 DatabaseMetaData 检索 mysql 表注释

    因此 我正在将 Vaadin Java Web 框架用于需要编辑表的功能的项目 Vaadin 提供了一种获取方法Connection对象来自SimpleJDBCConnectionPool 这是 API https vaadin com a
  • XSLT - 从模板中删除空格

    我正在使用 XML 存储一个小型联系人列表 并尝试编写一个 XSL 模板将其转换为 CSV 文件 我遇到的问题是输出中存在空格 输出 Friend John Smith Home 123 test Sebastopol California
  • 在 Matlab 中向量化数组索引/取子集

    假设我有一个长数据向量 y 加上一些索引 我想在每个索引周围提取一个简短的片段或窗口 例如 假设我想构建一个矩阵 其中每个小于 3 的值之前包含 64 个样本 之后包含 64 个样本 这在 for 循环中很简单 WIN SIZE 64 Sa
  • 监视器应该等待什么对象?

    使用 Monitor Wait object obj 时 应该对 obj 使用什么 在这个article http www yoda arachsys com csharp threads 我正在阅读 NET 中的多线程 作者实例化了一个新
  • ASP.NET Core 1.0 - MVC 6 - Cookie 过期

    UPDATE 这绝对不是 RC1 中的错误 cookie 设置与默认的 UserManager 和 UserStore 一起使用 因此它一定与我的 UserManager UserStore 有关 我已经监督过 我基本上使用这里的实现 ht