Chrome在重定向后不发送cookie

问题描述:

在node.js(使用Hapi框架)中,我为用户创建链接以允许我的应用程序读取用户帐户。 Google处理该请求并询问是否授予权限。然后谷歌使用GET参数作为响应代码重定向到我的服务器,在这里我有一个问题。Chrome在重定向后不发送cookie

谷歌浏览器不会发送带有会话ID的cookie。

如果我将该cookie标记为cookie编辑扩展中的会话cookie,它将被发送。在php中有相同的行为,但php在创建会话时将Cookie标记为会话,所以这不是问题。我正在使用插件hapi-auth-cookie,它会创建会话并处理它的一切。我还将该cookie标记为非HttpOnly的hapi-auth-cookie设置,因为它是第一个区别,我注意到,在检查该PHP会话cookie和node.js中的我时。我对每个重定向都有401错过验证。如果我把光标放在地址栏并按回车,一切正常,所以这是一个重定向的问题。

我的问题基本上是什么,可能是造成这种行为。另一方面,我不得不提到,Firefox在每次请求后都会发送cookie而不会有任何问题。

头重定向后(不带会话cookie):

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "x-client-data": "CJS2eQHIprbJAQjEtskECKmdygE=", 
    "x-chrome-connected": "id=110052060380026604986,mode=0,enable_account_consistency=false", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4" 
} 

头打在地址栏中(什么会正常工作)后回车:

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4", 
    "cookie": "SESSID=very_long_string" 
} 
+0

请显示重定向的代码。需要检查两件事:你是否在会话cookie上设置了rootpath,以便在网站上随处可见?您是否重定向到与cookie设置页面完全相同的域/端口/协议? – jfriend00

+0

是的,cookie有路径:/并且它在每条路线上都能正常工作。谷歌正在重定向到我的网站用户点击允许后,所以我没有这个代码。从理论上讲,这一切都很好,因为我可以在地址栏中输入地址,然后发送cookie。谷歌浏览器只是没有发送cookie后,从谷歌重定向到我的 'http:// localhost:3000/api?code = code_from_google' 但如果我复制链接并粘贴它,它的工作原理。 –

此问题是由高致病性禽流感,权威性造成-cookie尚未处理isSameSite(Hapi的新功能)。我们可以手动设置,例如。

const server = new Hapi.Server(
    connections: { 
     state: { 
      isSameSite: 'Lax' 
     } 
    } 
); 

但是请注意,默认情况下你有'Strict'选项,并在许多情况下,您可能不希望改变这种价值。

+0

对SameSite使用'Lax'解决了我的问题实例,但我很好奇:我们需要更改cookieAuth.set→reply.redirect序列,以便在重定向请求时返回cookie 'isSameSite'是'Strict'?如果我们重新加载,我们会得到cookie。 'set-cookie'显然是有效的。只是Chrome在重定向时不会发送cookie,即使重定向完全合格。 –

+0

我已经提出了上述问题的更完整形式,因为['42216700'](http://*.com/questions/42216700/how-can-i-redirect-after-oauth2-with-samesite-strict-和仍然得到 - 我的饼干) –

这个问题的一个独立的演示:https://gist.github.com/isaacs/8d957edab609b4d122811ee945fd92fd

这是一个在浏览器的错误。