【发布时间】:2019-06-12 11:18:01
【问题描述】:
我的申请由两部分组成:
- Web API,用 .NET Core 编写
- Web 应用程序,用 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 应用程序和 rest api 进行身份验证?当应用程序在节点中呈现时,它获取数据的方式与在浏览器中使用 isomorphic-fetch 的方式完全相同,cookie 也随之传递。
所有这一切都在 localhost 上完美运行,当应用程序位于与 api 不同的子域时,问题就开始了。
更新:
cookie 标头如下所示:
Set-Cookie: token=<token>; expires=Sat, 22 Jun 2019 05:35:18 GMT; domain=azurewebsites.net; path=/; secure
在 Firefox 上,它的工作方式与 chrome 不同。在 chrome 上,我执行身份验证 api 请求,获取令牌获取 cookie 标头,然后 cookie 不会随任何后续请求一起发送。
在 Firefox 中,cookie 会随后续请求一起发送,但是在刷新页面后,cookie 就消失了。
【问题讨论】:
-
您是否检查了 HTTP 请求和响应以查看设置了哪些 cookie?您是否有可能在使用仅限 https 的 cookie 时遇到问题?
-
@cmbuckley 感谢您的收看。我现在将 httponly 属性设置为 false,尽管我相信这是默认值。没有效果。
标签: azure authentication cookies .net-core server-side-rendering