在我的Web应用程序中使用ASP.NET Identity,我强制新用户在注册后启用2fa。 问题:第一次用户向2fa注册(扫描QR码并输入代码),并抛出404。 第二次或之后的任意多次,对服务器的请求是正常的,它们被重定向到网站。
在深入研究了中间件和http请求之后,我意识到第一个请求的cookie必不可少的有效期限为01/01/1970 ,但是在同一页面上第一个请求之后的所有请求有不同的Cookie(可以接受)。我绝对不知道为什么会这样,我的Cookie已在StartUp.cs
中注册,而在其他任何地方都没有这个问题。
我想补充一点,在发送请求之前,Cookie看起来像第二个请求,但是它们以某种方式重置为您可以在下面看到的内容,从而导致请求失败。
404错误请求,URL ===> / Identity / Account / Prompt2FA(首次请求)
找到了302,URL ===> / Identity / Account / Prompt2FA(第二次请求)
对此非常感谢,如果您需要任何代码来帮助解决此问题,请告诉我。我想避免有一个很长的问题。谢谢!
public class Startup
{
public IConfiguration Configuration { get; }
public IContainer ApplicationContainer { get; private set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>().AddDefaultTokenProviders().AddEntityFrameworkStores<ApplicationDbContext>();
services.ConfigureApplicationCookie(options =>
{
options.SlidingExpiration = true;
options.ReturnUrlParameter = "/Account/Login";
options.ExpireTimeSpan = TimeSpan.FromHours(2);
options.Cookie.Expiration = TimeSpan.FromHours(2);
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAntiforgery(option =>
{
option.HeaderName = "XSRF-TOKEN";
option.SuppressXFrameOptionsHeader = false;
});
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(services);
this.ApplicationContainer = containerBuilder.Build();
var serviceProvider = new AutofacServiceProvider(this.ApplicationContainer);
return serviceProvider;
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.ConfigureCustomExceptionMiddleware();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc();
}
}
}
答案 0 :(得分:0)
所以我意识到在StartUp.cs中我设置了
services.Configure<SecurityStampValidatorOptions>(options =>
{
// enables immediate logout, after updating the user's stat, default is 30minutes.
options.ValidationInterval = TimeSpan.Zero;
});
这样做的目的是当管理员更改用户信息时(我建立了基本的Admin CMS)。由于会话无效,他们将被迫再次登录。
我的问题中提到的问题出现在用户验证其两因素身份验证时,因为它更改了数据库表中的字段,然后使用户会话无效