马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
背景先容:.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;
- }
- };
- });
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|