Blazor WASM размещен с прерываниями аутентификации при обновлении до .net 6

У меня есть Blazor WASM, размещенный с аутентификацией пользователя, на котором был запущен .net5, и я обновился до .net 6. Однако теперь я получаю ошибку 500 при попытке нажать кнопку входа в систему.

Я взглянул на следующие

https://docs.duendesoftware.com/identityserver/v5/upgrades/is4_v4_to_dis_v5/

Я обновил все проекты до .net 6 и обновил все пакеты NugetPackages до последней версии. Я обновил пространства имен, которые использовались только в DataContext.

      public class DataContext : ApiAuthorizationDbContext<ApplicationUser>
    {
        public DataContext(DbContextOptions options, IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
        {
            ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
        }

Вот мой сервер Startup.cs

      public void ConfigureServices(IServiceCollection services)
        {
            //Register the Datacontext and Connection String
            services.AddDbContext<DataContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

            services.AddDatabaseDeveloperPageExceptionFilter();

            //Sets up the default Asp.net core Identity Screens - Use Identity Scaffolding to override defaults
            services.AddDefaultIdentity<ApplicationUser>( options =>
                    {
                        options.SignIn.RequireConfirmedAccount = true;
                        options.Password.RequireDigit = true;
                        options.Password.RequireLowercase = true;
                        options.Password.RequireUppercase = true;
                        options.Password.RequiredUniqueChars = 0;
                        options.Password.RequireNonAlphanumeric = false;
                        options.Password.RequiredLength = 8;
                        options.User.RequireUniqueEmail = true;
                    })
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<DataContext>();

            //Associates the User to Context with Identity
            services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, DataContext>( options =>
            {
                options.IdentityResources["openid"].UserClaims.Add(JwtClaimTypes.Role);
                options.ApiResources.Single().UserClaims.Add(JwtClaimTypes.Role);
            });
            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove(JwtClaimTypes.Role);

            //Adds authentication handler
            services.AddAuthentication().AddIdentityServerJwt();

            services.AddHttpContextAccessor();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DataContext dataContext)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseMigrationsEndPoint();
                app.UseWebAssemblyDebugging();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            //AutoMigrates data
            dataContext.Database.Migrate();

            app.UseHttpsRedirection();
            app.UseBlazorFrameworkFiles();
            app.UseStaticFiles();

            app.UseSerilogIngestion();
            app.UseSerilogRequestLogging();

            app.UseRouting();

            app.UseIdentityServer();
            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllers();
                endpoints.MapFallbackToFile("index.html");
            });
        }

Я добавил ключи DbSet в DataContext и выполнил миграцию, используя следующее в консоли диспетчера пакетов

      add-migration UpdateToDuende
update-database

Однако каждый раз, когда я нажимаю кнопку входа в систему, я получаю 500 со следующими

1 ответ

Таблица dbo.keys удаляется из базы данных во время обновления. Он также удаляется (по крайней мере, у меня) при первом запуске приложения после обновления. Где-то появляется сообщение об этом, но его трудно найти. Резервная копия вашей базы данных должна иметь таблицу dbo.keys, просто создайте скрипт оттуда и запустите ее. запустите приложение. запустите скрипт еще раз, и проблема, по крайней мере для меня, исчезла.

Другие вопросы по тегам