具有 2FA 的 Asp.Net Identity - 记住会话后不保留浏览器 cookie

2024-04-04

我正在使用带有 Asp.Identity 和两因素身份验证的 MVC5.2 的最新示例代码。

启用 2FA 后,当用户登录时,系统会提示输入代码(通过电话或电子邮件发送),并且他们可以选择“记住浏览器”,这样他们就不会在该浏览器上再次要求输入代码。

这是在VerifyCode操作中处理的

var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent:  model.RememberMe, rememberBrowser: model.RememberBrowser);

注意model.RememberMe未在默认模板中使用,因此为 false。

我发现当我这样做时.AspNet.TwoFactorRememberBrowser已设置,在会话结束时过期(因此它不记得浏览器)

现在如果我设置isPersistent = true, .AspNet.TwoFactorRememberBrowser有效期为 30 天,这很好,但是.AspNet.ApplicationCookie还有 30 天的有效期 - 这意味着当我关闭浏览器并重新打开时,我会自动登录。

我希望它不会保留我的登录信息,但会保留我选择记住 2FA 代码的方式。也就是说,用户应该始终需要登录,但如果他们已经保存了 2fa 代码,则不应要求他们提供该代码。

有其他人看过这个吗,还是我错过了什么?


这段代码似乎并不是为了在同一请求/响应中设置多个身份 cookie 而设计的,因为 OWIN cookie 处理程序最终共享相同的 AuthenticationProperties。这是因为 AuthenticationResponseGrant 有一个主体,但主体可以有多个身份。

您可以通过更改然后恢复特定于 2FA cookie 提供程序的 ResponseSignIn 和 ResponseSignedIn 事件中的 AuthenticationProperties 来解决此错误:

        //Don't use this.
        //app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

        //Set the 2FA cookie expiration and persistence directly
        //ExpireTimeSpan and SlidingExpiration should match the Asp.Net Identity cookie setting
        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationType = DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie,
            AuthenticationMode = AuthenticationMode.Passive,
            CookieName = DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie,
            ExpireTimeSpan = TimeSpan.FromHours(2),
            SlidingExpiration = true,
            Provider = new CookieAuthenticationProvider
            {
                OnResponseSignIn = ctx =>
                {
                    ctx.OwinContext.Set("auth-prop-expires", ctx.Properties.ExpiresUtc);
                    ctx.OwinContext.Set("auth-prop-persist", ctx.Properties.IsPersistent);
                    var issued = ctx.Properties.IssuedUtc ?? DateTimeOffset.UtcNow;
                    ctx.Properties.ExpiresUtc = issued.AddDays(14);
                    ctx.Properties.IsPersistent = true;
                },
                OnResponseSignedIn = ctx =>
                {
                    ctx.Properties.ExpiresUtc = ctx.OwinContext.Get<DateTimeOffset?>("auth-prop-expires");
                    ctx.Properties.IsPersistent = ctx.OwinContext.Get<bool>("auth-prop-persist");
                }
            }
        });

确保设置与主 Asp.Net Identity cookie 相同的 ExpireTimeSpan 和 SldingExpiration 以保留这些设置(因为它们合并到 AuthenticationResponseGrant 中)。

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

具有 2FA 的 Asp.Net Identity - 记住会话后不保留浏览器 cookie 的相关文章

  • 如何在 https 连接上检索 cookie?

    我试图将 cookie 保存在使用 SSL 但始终返回 NULL 的 URL 中 private Map
  • 使用主题 css 文件需要页面上的标头控件。 (例如 )

    我正在开发 asp net 网络项目 当我运行该项目时 它工作正常 但在服务器中 我收到以下错误 如何解决这个问题呢 Using themed css files requires a header control on the page
  • Django HTTPS 和 HTTP 会话

    我使用 Django 1 1 1 和 ssl 重定向中间件 通过 HTTPS 创建的会话数据 身份验证等 在站点的 HTTP 部分中不可用 无需将整个站点设置为 HTTPS 即可使其可用的最佳方法是什么 这是设计使然 您无法轻易更改 当通过
  • 使用 jQuery 将参数从一个 ASP.NET 页面传递到另一页面

    我需要使用 jQuery 将 4 个参数 3 个字符串和一个逗号分隔列表 从 ASP NET 页面传递到另一个 ASP NET 页面 目标页面应该作为单独的窗口启动 这与以下 jQuery 片段配合良好 sourcePageBtn clic
  • 我的 MS Access 数据库不会更新 asp.net

    我正在尝试更新我的数据库但没有成功 这就是我的桌子的样子 https i stack imgur com Q6EDk png https i stack imgur com Q6EDk png 打开模态后 它看起来像这样 https i s
  • asp.net 视图状态加密

    我有几个关于何时以及如何在 ASP NET 3 5 中加密视图状态的问题 例如 如果我的 web config 中有一个机器密钥条目 例如 解密Key 自动生成 IsolateApps 验证 AES 解密 自动 gt 此时视图状态是否已加密
  • 良好的错误处理实践

    对于 ASP NET 站点来说 什么是良好的错误处理实践 例子 谢谢 与任何 net 项目一样 我发现最好的方法是仅捕获可能发生在给定页面上的特定错误类型 例如 您可以捕获用户给定输入的格式异常 以防 JavaScript 验证失败并且您没
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证

    我在尝试使用 PHP 针对现有 ASP NET 成员资格数据库对用户进行身份验证时遇到一些问题 我在网上搜索过 发现现有的答案似乎对我不起作用 即 public static function Hash password salt deco
  • 休眠会话已关闭

    当我调用方法 session begin 事务时 如下所示 session factory is instantiated via a bean Session session this getSessionFactory getCurre
  • CSS、Javascript 和图像的长度为零

    我正在尝试将 ASP NET MVC 1 0 Visual Studio 2008 项目移植到 ASP NET MVC RC 2 Visual Studio 2010 该项目 并且一直 在 IIS 7 上运行 动态内容 由控制器提供的所有内
  • 当路径长度超过 260 个字符时 System.IO.DirectoryNotFoundException [重复]

    这个问题在这里已经有答案了 我有 ASP NET Core MVC 项目 针对 NET 4 62 我正在尝试保存文件 当路径长度低于 260 或 248 我不确定 时 一切正常 但是当路径长度更长时 我会得到一个System IO Dire
  • 如何在c#中生成8字节GUID值? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从 GUID 生成 8 字节唯一 ID https stackoverflow com questions 5678177 how to generate 8 bytes unique id fr
  • Web 表单中的 IRouteHandler:路由需要 HttpContext.User 的请求

    我正在尝试向 Asp Net Web Forms 应用程序添加一个非常基本的路由 在 IIS 7 下运行 集成模式 http mydomain com foo http mydomain com foo 我想显示动态页面的结果 http m
  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • MVC 操作过滤器和多线程

    我目前遇到了操作过滤器的线程问题 在我的应用程序上 我使用 ActionFilter 来执行每个操作的跟踪 此跟踪将提供统计信息 例如调用的持续时间 并记录参数被派往行动 实际的跟踪实现 由其他团队完成 使用 IDisposable 对象
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste

随机推荐

  • LINQ如何返回最后一个日期以及第一个和最后一个计数之间的差异

    我有一个包含以下列和示例数据的表 acteename updated at count count is not sorted in db dev 52 2 7 2020 5 56 43 PM 1 dev 52 2 7 2020 5 56
  • 根据 Woocommerce 中的特定产品数量渐进式固定优惠券折扣

    我有一个小问题 不知道如何解决自己 我想在我的 Woocommerce 商店中仅针对一种产品使用此逻辑 我使用这样的链接来自动应用优惠券代码并添加到购物车 https testsite com checkout add to cart Pr
  • Videojs仅添加播放控件

    我在用Video js在我的网页中播放视频 我想将播放器控件自定义为仅播放按钮 我的代码是
  • 如何构建/编译 ndk 应用程序?

    嗨 现在我正在下载 ndk 但我不知道如何构建和编译 实际上我是 Android 应用程序的新手 现在我正在使用 linux 并且我不太擅长命令行 embdes embdes laptop cd home embdes projects a
  • 如何从简单的 jsdom 函数返回值?

    我将 jsdom 与 jquery 一起使用 并且运行得很好 然而 我试图将我的代码模块化一点 这样我就不会重复自己 所以我用一些 jsdom 代码创建了一个基本函数 它接受一些 html DOM 用 jquery 调整它 然后将其吐出来
  • AngularJS:避免在收到响应之前两次调用相同的 REST 服务

    我有两个指令 每个指令都使用包装 q http 调用的同一工厂 angular module demo directive itemA restService function restService return restrict A l
  • 张量流中的批量归一化

    我注意到张量流的 api 中已经有批量归一化函数 但我不明白的一件事是如何更改训练和测试之间的程序 批量归一化在测试期间的行为与训练期间的行为不同 具体来说 在训练期间使用固定的均值和方差 某处有一些好的示例代码吗 我看到了一些 但是对于作
  • 在 PHPUnit 中进行模拟时,通过回调中的引用传递

    我有一个想要模拟的接口 并模拟其方法之一的行为 所以我创建了一个回调来非常简单地模拟行为 如果我创建一个基于此接口的新对象 但我想模拟该接口 则此测试通过 模拟的 setUp 方法被正常调用 并且在回调中调用 getVar testing
  • 如何在 ARM 架构上从 RAM 运行代码

    我正在对 ARM Cortex R4 进行编程 并且有一些二进制文件 我想从 TCRAM 执行它们 只是为了看看性能的提升是否足够好 我知道我必须编写一个函数来将二进制文件复制到 RAM 这可以通过链接器脚本来完成 并且知道二进制文件的大小
  • PHP 日期时间大于今天

    请帮忙我的代码有什么问题吗 它始终返回今天的日期大于 01 02 2016 其中 2016 年大于 2015 年
  • 无法使用 [formControlName] 禁用 matInput 元素

    我在用着matInput and mat form field angular material 在 Angular 组件中 我无法禁用matInput 可以在这里看到一个工作示例 https stackblitz com edit ang
  • SSL 握手挂起

    我在论坛上看到过这个问题 但找不到任何合适的解决方案 此外 所有这些问题都缺少一些信息 所以我想把我学到的所有东西放在这里 连接点 我正在使用 SSL TLSopenfire具有2路身份验证 获得自签名通配符证书 这意味着我在客户端和服务器
  • startMonitoringForRegion并不总是将区域添加到monitoringRegions

    我无法让 startMonitoringForRegion 持续添加区域 int i 0 for Deals d in deals NSLog deal addRegionsInDealsArray d deal id if d latit
  • 在托管 ASP 站点的 URL 中附加 www(即无 IIS 访问权限)

    我看到很多类似的问题都是用乱码写的 我不明白 使用 htaccess 将非 www URL 重定向到 www https stackoverflow com q 50931 153923 将不带 www 的 URL 重定向到 www htt
  • jQuery 从 DOM 中删除元素仍将报告保留为当前状态

    我有一个地址查找系统 用户输入邮政编码 如果邮政编码经过验证 则返回并显示地址列表 然后他们选择一个地址行 该列表消失 然后地址行进一步分成一些表单输入 我面临的问题是 当他们完成上述过程 然后清除邮政编码表单字段 点击查找地址按钮 地址列
  • 抛出异常时如何显示堆栈跟踪

    我希望有一种方法可以在引发异常时向用户报告堆栈跟踪 做这个的最好方式是什么 如果可能的话 我希望它是便携式的 我希望弹出信息 以便用户可以复制堆栈跟踪并在出现错误时通过电子邮件发送给我 安德鲁 格兰特的回答 https stackoverf
  • 如何锁定表...做事...使用 Spring Boot 解锁表?

    这个想法基本上是扩展some具有自定义功能的存储库 所以我得到了这个设置 它确实有效 MappedSuperclass abstract class MyBaseEntity Id GeneratedValue strategy Gener
  • PHP 中的 ' 和 " 有什么区别? [重复]

    这个问题在这里已经有答案了 可能的重复 PHP 不同的引号 https stackoverflow com questions 1318028 php different quotes 简单的问题 php 中 和 有什么区别 什么时候应该使
  • 将密码重置邮件模板替换为自定义模板 laravel 5.3

    我为身份验证系统执行了 laravel 命令 php artisan make auth它为我的应用程序制作了身份验证系统 几乎一切都正常 现在 当我使用忘记的密码时 它会向我的邮件 ID 发送一个令牌 我看到模板包含 laravel 和一
  • 具有 2FA 的 Asp.Net Identity - 记住会话后不保留浏览器 cookie

    我正在使用带有 Asp Identity 和两因素身份验证的 MVC5 2 的最新示例代码 启用 2FA 后 当用户登录时 系统会提示输入代码 通过电话或电子邮件发送 并且他们可以选择 记住浏览器 这样他们就不会在该浏览器上再次要求输入代码