Angular 来自子域A的Cookie未发送到子域B
我有一个前端Angle应用程序,它托管在Angular 来自子域A的Cookie未发送到子域B,angular,http,cookies,session-cookies,httpcookie,Angular,Http,Cookies,Session Cookies,Httpcookie,我有一个前端Angle应用程序,它托管在dev.subdomain.mydomain.com上。应用程序向托管在dev.API.mydomain.com上的.net核心API发出HTTP请求。我的angular应用程序有一个与之关联的会话cookie,该cookie具有以下安全属性: Secure=true HttpOnly=true SameSite=None Domain=.mydomain.com 我希望cookie在每次请求时都被发送到后端服务器,但由于某些原因,请求在没有cookie
dev.subdomain.mydomain.com
上。应用程序向托管在dev.API.mydomain.com
上的.net核心API发出HTTP请求。我的angular应用程序有一个与之关联的会话cookie,该cookie具有以下安全属性:
Secure=true
HttpOnly=true
SameSite=None
Domain=.mydomain.com
我希望cookie在每次请求时都被发送到后端服务器,但由于某些原因,请求在没有cookie的情况下被发送
我添加了一个角度拦截器,它将with credentials
选项添加到传出请求中
req = req.clone({
headers: req.headers.set('Content-Type', 'application/json'),
withCredentials: true
});
但这也没用。在Chrome和Firefox中测试了这一点,结果相同
Update:
我注意到cookie确实会在初始http请求中发送(到服务器获取angular应用程序),但是使用httpClient的ajax请求不会与cookie一起发送
update2:
我已经设置了API,以便在飞行前响应中包含以下标题:
Access-Control-Allow-Origin: https://dev.subdomain.mydomain.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type,withcredentials
Access-Control-Allow-Methods: GET
Cookie仍然没有被发送。如果前端和API都在*.mydomain.com
下,那么它们应该算作同一个站点,这意味着SameSite=Lax
应该可以
如果您查看Chrome Developer工具,那么问题选项卡应该会告诉您任何受SameSite
默认值影响或属性设置不正确的cookie
在“网络”选项卡中,如果选择单个请求,则还可以查看Cookies子面板,并启用“显示筛选出的请求Cookies”以显示删除了哪些Cookies。将鼠标悬停在它们上方还将提供一个工具提示来解释原因
- 此处有深入调试指南:
- 视频版本在此:
如果前端和API都在*.mydomain.com
下,那么它们应该算作同一个站点,这意味着SameSite=Lax
应该可以
如果您查看Chrome Developer工具,那么问题选项卡应该会告诉您任何受SameSite
默认值影响或属性设置不正确的cookie
在“网络”选项卡中,如果选择单个请求,则还可以查看Cookies子面板,并启用“显示筛选出的请求Cookies”以显示删除了哪些Cookies。将鼠标悬停在它们上方还将提供一个工具提示来解释原因
- 此处有深入调试指南:
- 视频版本在此:
Cookies实际上应该只在前端使用。服务器端的cookie究竟是什么?它是会话cookie。我使用它来通过后端安全系统识别用户难道Oauth令牌不是比尝试使用cookie更好的解决方案吗?我们使用这个icookie n与jwt令牌的组合。这是一个遗留系统,我们正在努力解决这个问题。我的问题是我需要将cookie发送到服务器,我觉得这不是一个罕见的场景,cookie应该只在前端使用。服务器端的cookie究竟是什么?它是会话cookie。我使用它来通过后端安全系统识别用户难道Oauth令牌不是比尝试使用cookie更好的解决方案吗?我们使用这个icookie n与jwt令牌的组合。这是一个遗留系统,我们正在努力解决这个问题。我的问题是我需要将cookie发送到服务器,我觉得这种情况并不少见