tnblog
首页
视频
资源
登录
愿你出走半生,归来仍是少年
排名
3
文章
317
粉丝
22
评论
14
bootstrap 栅格布局一小例子
剑轩 : 后端写样式有点痛苦哇
一点flex布局的运用
剑轩 : 后端写样式有点痛苦哇
vue.js常用指令
剑轩 : 可以可以,多总结一点
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core 3.0迁移到3.1后cookie的问题

7415人阅读 2020/6/22 11:26 总访问:2062736 评论:0 收藏:0 手机
分类: net core

HTTP:浏览器的 SameSite 更改会影响身份验证
某些浏览器(如 Chrome 和 Firefox)对 Cookie 的 SameSite 实现进行了中断性变更。 这些变更会影响 OpenID Connect 和 WS 联合身份验证等远程身份验证方案,必须通过发送 SameSite=None 来选择退出。 但是,SameSite=None 会在 iOS 12 和其他浏览器的某些较早版本上中断运行。 应用需探查这些版本,并忽略 SameSite。

旧行为
SameSite 是对 HTTP Cookie 的 2016 草案标准扩展。 它旨在减少跨站点请求伪造 (CSRF)。 它最初设计成一项功能,服务器可通过添加新参数选择加入该功能。 ASP.NET Core 2.0 添加了对 SameSite 的初始支持。

新行为
Google 提出了一项不向后兼容的新草案标准。 该标准将默认模式更改为 Lax并添加了用于选择退出的新条目 None。Lax 可满足大多数应用 Cookie;但是,它会造成 OpenID Connect 和 WS 联合身份验证登录等跨站点方案中断。 由于请求流程不同,大多数 OAuth 登录不受影响。 新的 None 参数会导致实现先前草案标准的客户端(例如 iOS 12)出现兼容性问题。 Chrome 80 将包含这些更改。 有关 Chrome 产品发布日程表,请查看 SameSite 更新。
已更新 ASP.NET Core 3.1 来实现新的 SameSite 行为。 该更新重新定义了 SameSiteMode.None 的行为以发出 SameSite=None,并添加了一个新值 SameSiteMode.Unspecified 以忽略 SameSite 属性。 现在,所有 Cookie API 都默认为 Unspecified,但某些使用 Cookie 的组件设置了更特定于其方案的值,例如 OpenID Connect 相关性和 nonce Cookie。
有关此方面的其他最新更改,请参阅 HTTP:某些 Cookie SameSite 默认值已更改为 None 。 在 ASP.NET Core 3.0 中,大多数默认值已从 SameSiteMode.Lax 更改为 SameSiteMode.None(但仍使用之前的标准)。

支持旧版浏览器
2016 SameSite 标准要求将未知值视为 SameSite=Strict 值。 因此,任何支持原始标准的旧版浏览器都可能在检测到 SameSite 属性具有 None 值时中断。 如果 Web 应用要支持这些旧版浏览器,它们必须实现浏览器探查。 ASP.NET Core 不会为你实现浏览器探查,因为 User-Agent 请求标头值非常不稳定,每周都会更改。 相反,Cookie 策略中的扩展点允许添加特定于 User-Agent 的逻辑。
在 Startup.cs 中,添加以下代码 :

  1. private void CheckSameSite(HttpContext httpContext, CookieOptions options)
  2. {
  3. if (options.SameSite == SameSiteMode.None)
  4. {
  5. var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
  6. // TODO: Use your User Agent library of choice here.
  7. if (/* UserAgent doesn't support new behavior */)
  8. {
  9. options.SameSite = SameSiteMode.Unspecified;
  10. }
  11. }
  12. }
  13. public void ConfigureServices(IServiceCollection services)
  14. {
  15. services.Configure<CookiePolicyOptions>(options =>
  16. {
  17. options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
  18. options.OnAppendCookie = cookieContext =>
  19. CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
  20. options.OnDeleteCookie = cookieContext =>
  21. CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
  22. });
  23. }
  24. public void Configure(IApplicationBuilder app)
  25. {
  26. // Before UseAuthentication or anything else that writes cookies.
  27. app.UseCookiePolicy();
  28. app.UseAuthentication();
  29. // code omitted for brevity
  30. }

“选择退出”开关
通过 Microsoft.AspNetCore.SuppressSameSiteNone 兼容性开关,可暂时选择退出新的 ASP.NET Core Cookie 行为。 将以下 JSON 添加到项目的 runtimeconfig.template.json 文件中 :

  1. {
  2. "configProperties": {
  3. "Microsoft.AspNetCore.SuppressSameSiteNone": "true"
  4. }
  5. }

官方文档:https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/3.0-3.1


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

微信交易单号和订单号的区别

一般第三方在线支付系统中都会有两类订单号transactionId 为支付系统的订单号,由支付系统生成,并在回调时传回给商户,用...

layui 表单模块常见问题

layui 设置select宽度直接设置select外层的宽度就行,layui的select会自适应宽度layui 设置select会被百度编辑器挡住问题是...

C 读取硬盘信息 ManagementClass类

标签:roc图片dapemd编号openthread文件需要一、在很多情况下,你可能都需要得到微机的硬件信息。需要加上下面的这句话:us...

Redis集群注意事项

当主节点运行起,并且有项目在运行与其他子节点运行中,这个时候如果在添加子节点,这个时候可能会造成redis的死锁,一直访...

多线程、Lock锁、数据库实现队列

队列其元素以先进先出(Firstin,Firstout,FIFO)的方式来处理的集合。先放入队列中的元素会先读取。队列使用System.Collect...

css定位的简单运用

父容器使用相对定位position: relative子容器使用绝对定位position: relative这样就可以子容器相对父容器定位了,可以写一...

net core自定义路由

net core自定义路由和.net framework中差不多,例如在.net framework中的自定义路由routes.MapRoute( name:&quot;ArticleS...

Visual Studio小技巧

一.快捷键:按住Ctrl点击 选中当前这个词组,或者结合删除键,删除一整个词Ctrl+M+O:折叠当前窗口所有代码(注释,方法)C...

handler画图制作图片水印

handler画图制作图片水印,版权申明什么的,直接上代码publicvoidProcessRequest(HttpContextcontext) { context.Respons...

android使用MPAndroidChart开源图表折线图

1. 将mpandroidchartlibrary-2-1-6.ja包copy到项目的libs中在引用2:布局文件&lt;com.github.mikephil.charting.charts.Line...

GIT 整理

Git练习地址GIT生成本地的key 贴到git 完成关联HEAD:指向的是当前分支的最近一次提交记录Tracking:追踪,本地与远程分支的...

修改rabbitmq的连接端口

rabbitmq的默认连接端口是5672,如果要修改的话,可以通过配置文件修改当然一般情况下都会遇到坑默认配置文件地址:安装目...

解决:基础提供程序在 Open 上失败,EF无法生成实体问题

在学校图书馆的电脑上安装VS2013和SQL R2后,调试项目报错:基础提供程序在 Open 上失败怀疑是数据库的问题,然后删除数据...

TNBLOG(Button)

Web Page Effect:Html code:&lt;!DOCTYPEhtml&gt; &lt;html&gt; &lt;head&gt; &lt;metacharset=&quot;utf-8&quot;/&g...

封装调用api接口的通用方法(抱含存调用接口日志)

protectedstaticreadonlylog4net.ILog_log=log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod(...