亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

cookie 身份驗證問題 ASP.NET CORE 2.1。AWS 負載均衡

cookie 身份驗證問題 ASP.NET CORE 2.1。AWS 負載均衡

C#
蝴蝶不菲 2022-08-20 16:09:55
我已將 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個贊

好的,現在一切正常 :)。這就是與眾不同之處:

  1. 如果應用程序處于負載平衡狀態,則所有實例都必須共享數據保護加密密鑰(例如,使用相同的密鑰環)。因此,Redis和證書出現了。會話也應共享。因此,Redis再次出現。

  2. 用于調用的證書應正確加載。如果它無法加載,請不要進行該調用,但這確實是個壞主意。只要弄清楚為什么它沒有加載。ProtectKeysWithCertificate()

  3. 為了避免在自定義身份驗證中拋出無效操作異常 HttpContext。應在登錄操作中手動分配用戶。

關于證書的一件重要事情:數據保護模塊僅支持具有 CAPI 私鑰的證書。CNG被拋在后面。


查看完整回答
反對 回復 2022-08-20
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號