V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
chinvo
V2EX  ›  全球工单系统

腾讯云 CDN 导致后端 cookie、session 工作不正常

  •  
  •   chinvo · 2019-01-18 23:17:30 +08:00 · 3579 次点击
    这是一个创建于 2134 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们有一个用 Asp.Net Core 开发的用户中心系统,这个系统接入第三方登录,并且对公司业务提供 OAuth 授权。

    Asp.Net Core 的第三方登录组件都依赖 .Identity.External 和 .AspNetCore.Correlation.* Cookies 保存一些数据。

    我们之前偶有遇到因为 Cookies 过大(有些时候 .Identity.External 足有 ~2k 的巨大体积)导致的 404 问题,所以改用 SessionStore 来保存 claims。

    • SessionStore 的工作原理是把 claims 存到指定位置并返回一个 key 作为取回 claims 的凭据,然后讲此 key 发送到客户端 Cookie,我们选择使用 DistributedSqlServerCache 来保存这些数据。

    自从改用 SessionStore 之后,国内访问就经常遇到 OAuth 中间件报错、取不到 OAuth 用户信息等问题,仔细检查 log 之后发现后端取到的 Cookie 是空的,而数据库中这些数据并没有异常。

    国外访问(我们国外使用 Akamai 的 CDN )正常,而通过 Hosts 直接访问源站也没用问题,初步怀疑是国内 CDN 的问题,通过跟踪调试也发现通过国内 CDN 后,后端不能正确取得 SessionStore 的 key,于是导致无法从数据库获取对应 claims。

    • 相关问题已提交腾讯云工单,在这里吐槽一下 😂
    第 1 条附言  ·  2019-01-19 09:31:09 +08:00
    通过清理 SessionStore (DistributedSqlServerCache)、刷新 CDN 缓存、清理本地缓存、后端添加 Cache-Control Header 等尝试,虽然目前仍不能具体定位问题或确认是否已经解决,但是经测试和用户反馈暂未再次大规模出现相关问题
    10 条回复    2019-01-19 09:17:57 +08:00
    lhx2008
        1
    lhx2008  
       2019-01-18 23:23:40 +08:00 via Android
    cookies 应该是用户头发的吧,我感觉和 cdn 关系不大,另外动态内容为什么要走 cdn
    lhx2008
        2
    lhx2008  
       2019-01-18 23:29:26 +08:00 via Android
    先看看 cookies 在哪一个环节丢的,为什么 cdn 没有原样转发
    chinvo
        3
    chinvo  
    OP
       2019-01-18 23:45:05 +08:00
    @lhx2008 #1 主要是防止源站 IP 泄漏,已经考虑换负载均衡或者高防 IP 之类的产品了

    因为 CDN 内的动作没有办法跟踪调试,目前已经在腾讯云控制台提工单了
    pubby
        4
    pubby  
       2019-01-18 23:45:49 +08:00
    这种动态内容为啥用 CDN,不是应该用腾讯云的动态加速服务吗?
    chinvo
        5
    chinvo  
    OP
       2019-01-18 23:50:28 +08:00
    @pubby #4 所以已经在考虑切换了,之前上 CDN 的时候动态加速服务还没有推出公测,最近越来越频繁发现这类问题所以才提出来想和大家讨论看看。

    虽然动态内容用 CDN 有点偏离 CDN 的设计目的,但是毕竟国外很少区分 CDN / DSA 之类的产品,CF 和 Akamai 都是动态静态合一的服务。
    alvin666
        6
    alvin666  
       2019-01-18 23:52:55 +08:00 via Android
    动态内容再动一般来说 50 是静态的,50 是真的动,所以上 cdn 不仅能防 cc,抗 d,也能加快挺大速度的
    lhx2008
        7
    lhx2008  
       2019-01-18 23:54:29 +08:00
    @chinvo 提工单我觉得没啥用,用户 setCookies 的时候 set 到了吗,时间有没问题,最后发上 cdn 的时候有没有带 cookies 头,这些不能测试吗?
    huobazi
        8
    huobazi  
       2019-01-18 23:54:52 +08:00 via iPhone
    讲讲你 session 存在哪里的
    chinvo
        9
    chinvo  
    OP
       2019-01-18 23:58:37 +08:00
    @lhx2008 #7 Set 看起来 Set 到了,在隐私模式中可以看到有新增对应的 Cookie,就是不知道值是否正确


    @huobazi #8 SessionStore 是可以自己实现的 Interface,我这里是存 DistributedSqlServerCache
    tencentcloud
        10
    tencentcloud  
       2019-01-19 09:17:57 +08:00
    您好, 留意到您已提交了工单,我们正在核查处理,会尽快联系您沟通处理,感谢您的支持与理解。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:20 · PVG 04:20 · LAX 12:20 · JFK 15:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.