Azure 上的跨子域 cookie
Cross sub domain cookies on azure
我的申请由两部分组成:
- Web API,用 .NET Core 编写
- 网络应用程序,用 React 编写并使用 nodejs express 服务器呈现
我在 azure 上托管这些部分,每个部分都在它自己的子域上,所以我们有:
- api.azurewebsites.net
- app.azurewebsites.net
当用户登录时,我设置了一个 cookie,据我所知,cookie 可以跨子域使用。 cookie 的设置方式如下:
Response.Cookies.Append("token", "token value", new CookieOptions
{
Expires = DateTimeOffset.Now.AddDays(7),
SameSite = SameSiteMode.None,
Domain = "azurewebsites.net"
});
但是 cookie 不会随请求一起发送到任何一个子域。怎么会这样?
如果这是错误的方法,我该如何使用 SSR 应用程序进行身份验证,然后再使用 api?当应用程序在节点中呈现时,它获取数据的方式与在浏览器中使用的方式完全相同 isomorphic-fetch,cookie 会随之传递。
所有这一切都在本地主机上完美运行,当应用程序位于与 api 不同的子域时,问题就开始了。
更新:
cookie header 看起来像这样:
Set-Cookie: token=<token>; expires=Sat, 22 Jun 2019 05:35:18 GMT; domain=azurewebsites.net; path=/; secure
在 firefox 上它的工作方式不同于 chrome。在 chrome 我执行身份验证 api 请求,获取令牌获取 cookie header 然后 cookie 不会随任何后续请求一起发送。
在 firefox 中,cookie 确实会随后续请求一起发送,但是在刷新页面后,cookie 就会消失。
我找到了这个
出于安全原因,azurewebsites.net
域的跨子域 cookie 被阻止。
我的申请由两部分组成:
- Web API,用 .NET Core 编写
- 网络应用程序,用 React 编写并使用 nodejs express 服务器呈现
我在 azure 上托管这些部分,每个部分都在它自己的子域上,所以我们有:
- api.azurewebsites.net
- app.azurewebsites.net
当用户登录时,我设置了一个 cookie,据我所知,cookie 可以跨子域使用。 cookie 的设置方式如下:
Response.Cookies.Append("token", "token value", new CookieOptions
{
Expires = DateTimeOffset.Now.AddDays(7),
SameSite = SameSiteMode.None,
Domain = "azurewebsites.net"
});
但是 cookie 不会随请求一起发送到任何一个子域。怎么会这样?
如果这是错误的方法,我该如何使用 SSR 应用程序进行身份验证,然后再使用 api?当应用程序在节点中呈现时,它获取数据的方式与在浏览器中使用的方式完全相同 isomorphic-fetch,cookie 会随之传递。
所有这一切都在本地主机上完美运行,当应用程序位于与 api 不同的子域时,问题就开始了。
更新:
cookie header 看起来像这样:
Set-Cookie: token=<token>; expires=Sat, 22 Jun 2019 05:35:18 GMT; domain=azurewebsites.net; path=/; secure
在 firefox 上它的工作方式不同于 chrome。在 chrome 我执行身份验证 api 请求,获取令牌获取 cookie header 然后 cookie 不会随任何后续请求一起发送。
在 firefox 中,cookie 确实会随后续请求一起发送,但是在刷新页面后,cookie 就会消失。
我找到了这个
出于安全原因,azurewebsites.net
域的跨子域 cookie 被阻止。