首页
视频
资源
登录
风清月
愿你出走半生,归来仍是少年
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
mvc
9篇
c#面试题
1篇
爬虫
1篇
Redis
1篇
NET
37篇
JS相关
2篇
Oracle
1篇
随笔
30篇
学点小英语
9篇
Vue.js
3篇
jquery
2篇
Sqlerver
7篇
前端
53篇
ps
1篇
net core
39篇
更多
架构
9篇
rpc
1篇
EF
6篇
mui
8篇
微服务
8篇
微信
1篇
.net
5篇
svn
1篇
人工智能
6篇
nginx
4篇
docker
14篇
git
4篇
c++
3篇
linux
11篇
uniapp
7篇
k8s
23篇
python
3篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
.net core 3.0迁移到3.1后cookie的问题
6232
人阅读
2020/6/22 11:26
总访问:
1601524
评论:
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 中,添加以下代码 : ``` c# private void CheckSameSite(HttpContext httpContext, CookieOptions options) { if (options.SameSite == SameSiteMode.None) { var userAgent = httpContext.Request.Headers["User-Agent"].ToString(); // TODO: Use your User Agent library of choice here. if (/* UserAgent doesn't support new behavior */) { options.SameSite = SameSiteMode.Unspecified; } } } public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { options.MinimumSameSitePolicy = SameSiteMode.Unspecified; options.OnAppendCookie = cookieContext => CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); options.OnDeleteCookie = cookieContext => CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); }); } public void Configure(IApplicationBuilder app) { // Before UseAuthentication or anything else that writes cookies. app.UseCookiePolicy(); app.UseAuthentication(); // code omitted for brevity } ``` **“选择退出”开关** 通过 Microsoft.AspNetCore.SuppressSameSiteNone 兼容性开关,可暂时选择退出新的 ASP.NET Core Cookie 行为。 将以下 JSON 添加到项目的 runtimeconfig.template.json 文件中 : ``` json { "configProperties": { "Microsoft.AspNetCore.SuppressSameSiteNone": "true" } } ``` 官方文档:https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/3.0-3.1
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}