【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录

简介: 【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录

问题描述

Azure应用程序网关设置 set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD 登录使用cookie时使用不了。

分析过程

重写网关的set-cookie属性时,会删除其他的set-cookie属性,所以如果重写该Cookie的话可能会删除原来网站响应返回的cookie,可以参考:https://docs.azure.cn/zh-cn/application-gateway/rewrite-http-headers-url#limitations

限制
  • 如果响应中包含多个同名的标头,则重写其中某个标头的值会导致删除该响应中的其他标头。 这种情况往往出现于 Set-Cookie 标头,因为在一个响应中可以包含多个 Set-Cookie 标头。 例如,如果将应用服务与应用程序网关一起使用,并在应用程序网关上配置了基于 Cookie 的会话关联,则就会出现此类情况。 在这种情况下,响应将包含两个 Set-Cookie 标头:一个用于应用服务(例如 Set-Cookie: ARRAffinity=ba127f1caf6ac822b2347cc18bba0364d699ca1ad44d20e0ec01ea80cda2a735;Path=/;HttpOnly;Domain=sitename.chinacloudsites.cn),另一个用于应用程序网关关联(例如 Set-Cookie: ApplicationGatewayAffinity=c1a2bd51lfd396387f96bl9cc3d2c516; Path=/)。 在此情况下重写其中一个 Set-Cookie 标头可能会导致从响应中删除另一个 Set-Cookie 标头。
  • 当应用程序网关配置为重定向请求或显示自定义错误页时,不支持重写。
  • 标头名称可以包含任何字母数字字符和 RFC 7230 中定义的特定符号。 目前不支持在标头名称中使用特殊字符下划线 (_)。
  • 无法重写 Connection 和 Upgrade 标头

在AAD的文档文档中,指明了AAD只支持 samesite=none 的这种设置,如果要将samesite值设为lax或者strict,那么AAD验证时无法通过的,可以参考:https://docs.azure.cn/zh-cn/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser?tabs=java

什么是 SameSite?

SameSite 是一个属性,可在 HTTP Cookie 中设置该属性,以防止 Web 应用程序遭受跨站点请求伪造 (CSRF) 攻击:

  • SameSite 设置为 SameSite时,cookie 将在同一站点中的请求和来自其他站点的 GET 请求中发送。 不会在跨域的 GET 请求中发送 Cookie。
  • 使用 Strict 值可确保仅在同一站点内的请求中发送 Cookie。

默认情况下,不会在浏览器中设置 SameSite 值,正因如此,在请求中发送的 Cookie 没有限制。 应用程序需要根据要求设置 Lax 或 Strict 来启用 CSRF 保护。

 

PS: 最后的临时解决方案为:不在应用程序网关(Application Gateway)中重写Cookie,而是把 set-cookie=key=value;SameSite=Strict;HTTPOnly 设置在Nginx:

 

相关文章
|
Web App开发 数据安全/隐私保护 Python
万能ck提取登录软件,京东贴吧淘宝拼多多cookie提取工具,python框架分享
这个框架使用了Selenium进行浏览器自动化操作,包含了京东和淘宝的登录示例。代码展示了如
|
数据采集 存储 Web App开发
如何避免爬虫因Cookie过期导致登录失效
如何避免爬虫因Cookie过期导致登录失效
|
存储 数据库 数据安全/隐私保护
抖音ck提取工具,快手小红书微博哔哩哔哩cookie提取登录软件,python框架
这个框架提供了完整的Cookie提取功能,支持抖音、快手、小红书、微博和哔哩哔哩平台。主要特点包括
|
Kubernetes 数据安全/隐私保护 容器
【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header / Response Header)
【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header / Response Header)
345 3
|
缓存 网络协议 API
【Azure 环境】请求经过应用程序网关,当响应内容大时遇见504超时报错
应用程序网关的响应缓冲区可以收集后端服务器发送的全部或部分响应数据包,然后再将它们发送给客户端。 默认在应用程序网关上启用响应缓冲,这对于适应缓慢的客户端很有用。
292 0
|
安全 API
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
345 0
|
11月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
576 2
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
821 1
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
458 2
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
883 156