.net core cookie授權給非服務器域名的網站時可能無法正常刪除的解決辦法
背景介紹:.net core框架,API服務器域名是a.com, 服務器需要通過cookie授權給網站b.com域名并設置了授權域名為a.com。 當你想退出時,在網站b.com使用js清理了本域名下的所有cookie后,刷新瀏覽器cookie列表也確實看到本域名下沒有cookie了。 這時再使用另一個賬號登錄后會發現還是原用戶的登錄信息。
原因分析:上面已經提到了,授權API服務器設置了授權cookie的域名為a.com,如果網站b.com僅清理本域名下的cookie自然無法刪除a.com的授權cookie(瀏覽器不允許跨域操作或訪問cookie)。
解決方案: 1. 調用跟授權cookie域名同源的API服務器的退出接口。 如調用: a.com/logout。 通過同源域名下的服務器來刪除授權cookie,問題正常解決。
2. 設置每次調用登錄接口時,不判斷用戶是否已授權,直接返回新的授權cookie。 通過強制覆蓋客戶端授權Cookie處理,問題正常解決。
這里把cookie跨域授權的核心示例展示一下,供參考:
services.AddAuthentication().AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.LoginPath = "/admin/login"; //未登錄重定向路徑 options.LogoutPath = "/login/logout"; //未授權時重定向路徑 options.ExpireTimeSpan = TimeSpan.FromDays(1); //授權有效期 options.Cookie.Domain = CONST.DEFAULT_DOMAIN; //Cookie存儲域名 options.Cookie.Name = "AdminUserToken"; //Cookie名稱 options.Cookie.Path = "/"; options.Cookie.IsEssential = true; //是否強制存儲cookie,即使用戶不同意使用cookie,也可以強制存儲. options.Cookie.HttpOnly = true; //設置是否允許客戶端JS可訪問授權cookie: true=不允許 options.Cookie.SameSite = SameSiteMode.None; //設置跨域時設置為:None options.Cookie.SecurePolicy = CookieSecurePolicy.Always; ////設置跨域時設置為:CookieSecurePolicy.Always:確保Cookie通過 HTTPS 發送 options.Events = new CookieAuthenticationEvents { // 重寫 OnRedirectToLogin 事件,防止重定向,返回 401 OnRedirectToLogin = context => { if (context.Request.Path.StartsWithSegments("/user") && context.Response.StatusCode == 200) { context.Response.StatusCode = 401; } return Task.CompletedTask; } }; });
*感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神 支持是博主強大的寫作動力。歡迎轉載!
*博主的文章是自己平時開發總結的經驗,由于博主的水平不高,不足和錯誤之處在所難免,希望大家能夠批評指出。
*我的博客: http://www.rzrgm.cn/lxhbky/
*博主的文章是自己平時開發總結的經驗,由于博主的水平不高,不足和錯誤之處在所難免,希望大家能夠批評指出。
*我的博客: http://www.rzrgm.cn/lxhbky/
浙公網安備 33010602011771號