簡體   English   中英

MVC 5 | 錯誤 400 實體太大(身份用戶有很多角色)

[英]MVC 5 | Error 400 Entity too large (Identity User has a lot of Roles)

編輯:為此工作的解決方案:實現了這個:來自https://github.com/aspnet/Security/blob/22d2fe99c6fd9806b36025399a217a3a8b4e50f4/samples/CookieSessionSample/MemoryCacheTicketStore.cs的 SessionCookieStore

並將其添加到我的啟動中:

services.AddSingleton<ITicketStore, MemoryCacheTicketStore>();
        
        services.AddOptions<CookieAuthenticationOptions>(IdentityConstants.ApplicationScheme)
                .Configure<ITicketStore>((options, store) => {
                    options.SessionStore = new MemoryCacheTicketStore();
                });

我正在使用Microsoft-Identity PlatformControllerDiscovery為我的項目中的每個 Controller 操作播種角色。 這些角色被保存到數據庫中,並且可以應用於用戶以使他們能夠訪問應用程序的每個部分。 Controller 中的每個操作都有一個自定義授權標簽(例如:[Authorize("BaseData:Home:Index")]。這工作得很好。

現在有很多 Controller 操作和區域,並且在啟動時創建了很多角色

一個“超級管理員”-用戶正在自動播種和授予所有角色。 現在我的錯誤:

當“SuperAdmin”登錄時,出現此錯誤(僅在 IIS 上的生產中):

HTTP 錯誤 400。請求標頭的大小太大

這些 cookies 在請求中發送:

  • .AspNetCore.Identity.Application
  • .AspNetCore.Identity.ApplicationC1(大小:4KB)
  • .AspNetCore.Identity.ApplicationC2(大小:4KB)
  • .AspNetCore.Identity.ApplicationC3(大小:4KB)
  • .AspNetCore.Identity.ApplicationC4(大小:4KB)
  • .AspNetCore.Identity.ApplicationC5(大小:2,5KB)

如何減少這個cookie? 或者也許禁用cookie並檢查服務器端的角色?

我的配置服務() function:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddIdentity<Nutzer, IdentityRole>()
                    .AddEntityFrameworkStores<ApplicationDbContext>()
                    .AddDefaultUI()
                    .AddErrorDescriber<CustomIdentityErrorDescriber>()
                    .AddDefaultTokenProviders();

            services.Configure<SecurityStampValidatorOptions>(options => options.ValidationInterval = TimeSpan.Zero);

            //https://stackoverflow.com/questions/51046239/creating-dynamic-role-based-authorization
            services.AddSingleton<IMvcControllerDiscovery, MvcControllerDiscovery>();

            services.Configure<IdentityOptions>(options =>
            {
                options.Password.RequireDigit = false;
                options.Password.RequiredLength = 6;
                options.Password.RequireLowercase = false;
                options.Password.RequireUppercase = false;
                options.Password.RequireNonAlphanumeric = false;
                options.SignIn.RequireConfirmedEmail = false;
                options.SignIn.RequireConfirmedAccount = false;
            });

            services.AddControllersWithViews(options =>
            {
                options.ModelBinderProviders.Insert(0, new CustomBindersProvider());
            }).AddRazorRuntimeCompilation();

        }

編輯1:

設置HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters鍵不是我想要的,因為將來會有更多的角色並且 MaxByteSize 是有限的。

我想你可以參考這個部分來解決你的問題,因為你的問題是請求中也有大的 cookie,所以我們應該做的是減少 cookie 大小或增加服務器限制。

您可以先嘗試清理瀏覽器中的cookie(ctrl+shift+del在瀏覽器中彈出並清理cookie),如果這沒有意義,那么您可以嘗試打開寄存器和go到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\ParametersMaxFieldLengthMaxRequestBytes設置為較大的值。 設置好值后,別忘了重啟電腦才能啟用配置。 起初我將值設置為 1,然后我也遇到了同樣的問題。

在此處輸入圖像描述 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM