我已將 ASP.NET 核心 2.1 應用程序部署在 Docker 容器中的 AWS 負載均衡器后面。當我嘗試從登錄頁面登錄應用程序時。我得到 InvalidOperationException,理由如下:未指定身份驗證方案,并且未找到 DefaultChallengeScheme。但是當我再次點擊相同的URL時,它實際上移動到正確的頁面并工作了一段時間,然后再次拋出HTTP狀態為500的相同異常,并且在第二次嘗試打開同一頁面后,它成功了。有趣的是,Chrome并不像IE那樣健壯:如果IE在異常后無法恢復,Chrome總是在隨后提交頁面時返回404,這會產生上述異常。因此,如果有人能夠為我提供如何補救這種情況的想法,我將不勝感激 顯然問題與身份驗證有關,但我無法弄清楚應該做什么。以下是Startup.cs中的ConfigalServices()的相關練習: string appname = "MyApp"; var redis = ConnectionMultiplexer.Connect(Configuration.GetConnectionString("RedisConnection")); services.AddDataProtection() .SetApplicationName(appname) .PersistKeysToRedis(redis, "DataProtectionKeys") .ProtectKeysWithCertificate(LoadCert(Configuration)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddAuthentication( CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.LoginPath = new PathString("/Area/Ctrl/Login"); options.LogoutPath = new PathString("/Area/Ctrl/Logout"); options.Cookie.IsEssential = true; }); services.AddDistributedRedisCache(o => { o.Configuration = Configuration.GetConnectionString("RedisConnection"); }); services.AddSession(options => { options.Cookie.Name = appname; options.IdleTimeout = TimeSpan.FromSeconds(600); });以下是Startup.cs中的Configor()中的相關代碼: app.UseForwardedHeaders(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthentication(); app.UseSession(); app.UseMvc(routes => { routes.MapRoute( name: "areas", template: "{area:exists}/{controller=Ctrl}/{action=Login}/{id?}" ); });
1 回答

小唯快跑啊
TA貢獻1863條經驗 獲得超2個贊
好的,現在一切正常 :)。這就是與眾不同之處:
如果應用程序處于負載平衡狀態,則所有實例都必須共享數據保護加密密鑰(例如,使用相同的密鑰環)。因此,Redis和證書出現了。會話也應共享。因此,Redis再次出現。
用于調用的證書應正確加載。如果它無法加載,請不要進行該調用,但這確實是個壞主意。只要弄清楚為什么它沒有加載。
ProtectKeysWithCertificate()
為了避免在自定義身份驗證中拋出無效操作異常 HttpContext。應在登錄操作中手動分配用戶。
關于證書的一件重要事情:數據保護模塊僅支持具有 CAPI 私鑰的證書。CNG被拋在后面。
- 1 回答
- 0 關注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消