临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

临近年关,咨询师提出360、搜狗急速浏览器无法单点登录到公司核心产品WD: 重定向过多。

现象

经过测试, 出现单点登陆故障的是搜狗、360等双核浏览器(默认使用Chrome内核), 较新式的Edge、Chrome、Firefox均未出现此障碍。

Developer tool监测不到原始的SSO请求,互联网上同类型问题不少,答案却惨不忍睹,味同嚼蜡,人云亦云。年末不能晚节不保,决心啃下硬骨头.

拿出网络分析利器Fiddler

循环重定向?

显示单点登录从website1?ticket =XXOO重定向回首页website.com,确实发生了循环重定向,搜狗浏览器有重定向次数限制,最终返回浏览器定制的404 页面。

结合之前手撕公司单点登录原理:

探究站点发生循环重定向的原因:

自⑥ website1向浏览器写入Cookie for website1,重定向请求站点主页www.website1.com⑦的时候,丢失Cookie for website1,导致website1认为用户未登陆,被迫重定向请求sso-website.com?service=http://www.website1.com②重新认证;

sso-website.com站点检测到存在Cookie for sso(该用户已经认证),又开始走④⑤⑥⑦步骤,在第⑦步依旧未携带Cookie for website1,又再次重定向请求sso-website.com?service=http://www.website1.com②,循环往复。

定位问题

熟稔web开发的都知道 Cookie for website1 会在请求 website1.com时自然携带

Set-Cookie: X-Gridsum-FullTicketId=TGT-178876-em4uf0faD1c4pbt*********k5Z0vN4uPOoEBWfGIP6l-x-gridsumdissector; path=/; samesite=none; httponly

故障关键在单点登录最后一步重定向,竟然未携带Cookie for website1 

截图:

着重分析写入Cookie for website1的附加属性:

Path 指示需要发送该cookie头的根url,      =/ 表示站点下所有地址都会发送该Cookie
SameSite 设置该Cookie的同源策略,     = none 指示客户端禁用Cookie的同源限制
HttpOnly 指示创建的Cookie是否能通过Javascript访问(该cookie依然存于浏览器上),这里true,表示不能通过Javascript访问该Cookie

从属性定义看,属性值的写法也无懈可击。

最后在官方站点找到如下内容:

The SameSite = None parameter causes compatibility problems with clients that implemented the prior 2016 draft standard (for example, iOS 12). See Supporting older browsers in this document; Apps accessed from older browsers which support the 2016 SameSite standard may break when they get a SameSite property with a value of None. Web apps must implement browser detection if they intend to support older browsers
遵守IETF 2016草案的浏览器不认识Samesite= None属性值,会遇到兼容性问题,若站点打算支持这些旧内核浏览器须实现浏览器嗅探。

这个信息让我眼前一亮,赶紧对比故障的浏览器内核:

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0

搜狗浏览器Chrome内核版本65,位列不兼容列表,binggo, 问题定位。

修复策略

我们的目的是为兼容这些旧核心浏览器,但是本人不打算打补丁(浏览器嗅探,根据User-Agent屏蔽SameSite=none),
结合站点的同源限制的现状,本站点没有必要显式设置SameSite= None,可保持SameSite默认值Lax
说干就干,修改SameSite属性值为Lax,重新k8s部署之后,搜狗浏览器正常单点登陆。

context.Response.Cookies.Append(_options.SsoTgtName, tgt1, new Microsoft.AspNetCore.Http.CookieOptions{HttpOnly = true,SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Lax,Secure = false,});

SameSite历史和版本变更

ASP.NET Core是在2.0版本开始支持SameSite(IETF 2016草案),ASP.NET Core默认将Cookie SameSite设为Lax, 遇到身份验证问题后,大多数SameSite使用被禁用。
IETF 2019标准发布了修复补丁,2019 SameSite草案规定:

  • 与2016年草案不向后兼容

  • 默认将Cookie SameSite= Lax

  • 显式设置SameSite=None时,必须将该Cookie标记为Secure, None是一个新值

  • ASP.NET Core 3.1在SameSite枚举值新增Unspecified,表示不写入SameSite属性值,继承浏览器默认的Cookie策略

  • 预定于2020年2月由Chrome默认启用该草案,浏览器需要迁移至该草案。

综上,SameSite=None引出了一个难缠的浏览器新旧版本兼容问题,就本站而言, Cookie的同源策略SameSite=Lax是可行的,是能够适应大多数单点登录。 

[1] https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-2.1
[2] https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core

往期精彩回顾

手撕公司单点登录原理

ASP.NETCore跨平台技术内幕

ASP.NETCore结合Redis实践消息队列

转载是一种动力,分享是一种美德    ~~..~~

如果你觉得文章还不赖,您的鼓励是原创干货作者的最大动力,让我们一起激浊扬清。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.Net Core 已支持 gRPC-Web !!

grpc-dotnet 项目在 PR #695 完成了 ASP.NET Core 服务与 .NET Core gRPC 客户端的 gRPC-Web 实现。虽然目前还是实验性项目,但是并不阻碍我们为之兴奋。下面我们来看看如何使用。gRPC-Web 简介gRPC-Web 允许从浏览器应用程序使用 gRPC,gRPC-Web 支持在新…

蓝桥杯2017初赛-打印大X-找规律

题目描述 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,所有的空白位置都以句点符来代替。 要求输入两个整数m n,表示笔的宽度,X的高度。 输入 输入存在多组数据 …

排查生产问题linux命令,排查问题所用到的一些Linux命令实践(不定期更新。。)...

一、前言线上问题排查可能是每个程序员都会经历的。在排查的过程中,往往会用到很多Linux命令,也会产生一些很实用的技巧。本博文通过分析一次线上问题排查的过程,把所有用到的命令串起来。每个Linux命令的参数往往会很多,下面对Li…

蓝桥杯2015决赛-方格填数-枚举 or dfs

题目描述 在2行5列的格子中填入1到10的数字。 要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。 如下图所示的2种,就是合格的填法。 请你计算一共有多少种可能的方案。 输出 请输出该整数,不要输出任何多…

【实战 Ids4】║ 在Swagger中调试认证授权中心

回家的路上照顾好自己哟~大家好,老张已经顺利到家啦,闲的无事写两篇文章冒个泡吧,其实写的内容都是群友提出来的问题,简单的我会在群里直接提供思路,麻烦的我就写个文章说明一下吧,也是自己的一个记录作用&…

linux 集群 java,Linux Tomcat 集群 利用记实1--搭建javaWeb运行情况

前段时候一向在搞linux,有很多多少工具只曩昔没有做过。影象不是那么深刻,此刻把历程记实下来,以备今后盘问。一:起首说一下我们的计划, 一共有六台办事器,此中两台安置Oracle 10g做数据库集群(这个不在这篇…

蓝桥杯2016初赛-网友年龄-枚举

题目描述 某君新认识一网友。 当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 输出…

linux下yum安装pgsql,CentOS7使用yum安装PostgreSQL和PostGIS的方法

1.更新yum源CentOS7默认yum源的PostgreSQL版本过低,不适合在本版本上使用。在https://yum.postgresql.org/repopackages.php上找到适合CentOS7的RPM源,复制其url地址,使用yum安装。同时安装epel(Extra Packages for Enterprise Linux 7)&…

在 Blazor WebAssembly 中使用 gRPC-Web

对于单页面应用程序,gRPC-Web 是 JSON-over-HTTP 的一种方便、高性能的替代方案。如果你已经了解关于 gRPC 和 gRPC-Web 的一切,你可以跳到 添加 gRPC 服务到一个Blazor WebAssembly 应用程序 一节。如果你只是想要一些简单的 Blazor WebAssembly gRPC-…

蓝桥杯2016初赛-生日蜡烛-枚举

题目描述 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 输出 请填写他开始过生日party的年龄数。 代码如下&#…

【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

《ASP.NET Core 微服务实战》译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-translator/“微服务”的概念在 2014 年正式提出之后,越来越多的团队开始用它来设计自己的业务系统,各种微服务框架和开发过程管理…

蓝桥杯2016初赛-有奖猜谜-模拟

题目描述 小明很喜欢猜谜语。最近,他被邀请参加了X星球的猜谜活动。 每位选手开始的时候都被发给777个电子币。 规则是:猜对了,手里的电子币数目翻倍,猜错了,扣除555个电子币, 扣完为止。 小明一共猜了15条谜语。战果…

linux6.5dns装什么,CentOS6.5安装DNS服务

1,安装软件包yum install -y bind2,备份配置文件cp /etc/named.conf /etc/named.conf_bak3,编辑配置文件vim /etc/named.conf//// named.conf//// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS// server as a c…

【在路上2】快递的运单轨迹

通达系早期的扫描数据高度类同,业务员从商家或散客收件之后,PDA做一次揽收操作。业务员或承包区把快件送到网点,晚上由网点派车统一送到转运中心,此时网点做一次发件扫描,转运中心做一次到件扫描。转运中心分拣后发出&…

蓝桥杯2017初赛-正则问题

题目描述 考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6 输入 输入一个由x()|组成的正则表达式。输入…

linux apache找不到woff2,使服务器Nginx(或者Apache)支持woff2等字体文件

为了在前端正确地显示字体,浏览器必须使用正确的http header来接受字体文件。如果服务器没有设置要求的头信息,那么有些浏览器就会在控制台报错或者直接不能显示。可能你的服务器已经配置好了,你无须再动任何东西。如果没有配置好&#xff0c…

.NET Core验证ASP.NET密码

.NET Core验证ASP.NET密码随着 .NETCore的持续更新和完善,越来越多的机构已经选择或者升级为 .NETCore。但由于技术不完全相同,不可能所有应用/数据库都能无缝迁移,因此 ASP.NETCore和传统 ASP.NET之间多少会存在一些挑战,需要更多…

蓝桥杯2017初赛-9数算式-dfs

题目描述 观察如下的算式:9213 x 85674 789314562 左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。 而乘积恰好也是用到了1~9的所有数字,并且每个1次。 请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少…

linux下I2C驱动发送IO时序,I2C驱动情景分析——怎样控制I2C时序

内核版本:linux-3.4.2源程序: linux-3.4.2\drivers\i2c\busses\I2c-s3c2410.c这次要解决的问题是:如何配置soc的I2C模块,输出想要的时序波形?关于Linux里I2C驱动的架构,在转载的文章讲得相当透彻(《linu…

蓝桥杯2017初赛-分巧克力-二分

题目描述 **儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足&#…