Asp.net 核心 1.1 验证安全标记不起作用

Asp.net core 1.1 validate security stamp isn't working

好的,我已经为此苦苦挣扎了 2 天,但找不到任何相关信息。

我正在使用 asp.net 核心 1.1,我已经在我的系统中实现了身份,并且效果很好。但我的问题是用户在更新安全标记后仍然在线。

我尝试将 SecurityStampValidationInterval 设置为 zero,1 秒,但似乎没有任何效果。

此时我不太确定这是不是一个错误?还是我做错了什么?

这是我的 IdentityOptions 的样子:

services.Configure<IdentityOptions>(options =>
            {
                options.Tokens.PasswordResetTokenProvider = _defaultTokenProviderName;

                options.Password.RequireDigit = true;
                options.Password.RequiredLength = 6;
                options.Password.RequireLowercase = true;
                options.Password.RequireUppercase = true;
                options.Password.RequireNonAlphanumeric = false;

                options.User.RequireUniqueEmail = true;

                options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.";

                options.SecurityStampValidationInterval = TimeSpan.Zero;



                options.Cookies.ApplicationCookie.CookieName = "Identity_cookie";
                options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
                options.Cookies.ApplicationCookie.SlidingExpiration = true;

            options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
            {
                OnRedirectToLogin = (context) =>
                {
                    var cul = context.HttpContext.Features.Get<IRequestCultureFeature>();
                    var lang = cul.RequestCulture.Culture.TwoLetterISOLanguageName;


                    context.Response.Redirect($"/{lang}/Account/Login?{context.Options.ReturnUrlParameter}" +
                         $"={System.Net.WebUtility.UrlEncode(context.Request.Path + context.Request.QueryString)}");
                    return Task.FromResult(0);
                },

            };
            });

这就是我更新安全标记的方式:

user.Blocked = !user.Blocked;
await _userManager.UpdateSecurityStampAsync(user);
await _userManager.UpdateAsync(user);

提前致谢。

我更新了我的问题以包含其余代码(抱歉,它在 service.AddIdentity.. 下,所以我忘了复制它)。

所以我的问题是关于设置 options.Cookies.ApplicationCookie.Events 以便使用身份选项中的自定义 OnRedirectToLogin 出于某种原因我不得不将其移动到 app.UseCookieAuthentication()

我的新密码是:

app.UseIdentity();

            app.UseCookieAuthentication(new CookieAuthenticationOptions()
            {
                Events = new CookieAuthenticationEvents()
                {
                    OnRedirectToLogin = (context) =>
                    {
                        var cul = context.HttpContext.Features.Get<IRequestCultureFeature>();
                        var lang = cul.RequestCulture.Culture.TwoLetterISOLanguageName;


                        context.Response.Redirect($"/{lang}/Account/Login?{context.Options.ReturnUrlParameter}" +
                             $"={System.Net.WebUtility.UrlEncode(context.Request.Path + context.Request.QueryString)}");
                        return Task.FromResult(0);
                    },

                }
            });

services.Configure<IdentityOptions>:

options.Tokens.PasswordResetTokenProvider = _defaultTokenProviderName;

                options.Password.RequireDigit = true;
                options.Password.RequiredLength = 6;
                options.Password.RequireLowercase = true;
                options.Password.RequireUppercase = true;
                options.Password.RequireNonAlphanumeric = false;

                options.User.RequireUniqueEmail = true;

                options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.";

                options.SecurityStampValidationInterval = TimeSpan.Zero;



                options.Cookies.ApplicationCookie.CookieName = "Identity_cookie";
                options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
                options.Cookies.ApplicationCookie.SlidingExpiration = true;

我不知道这是一个错误还是什么,但配置应该在 ConfigureServices 里面,对吗?