Cookies cookie httponly未发送

Cookies cookie httponly未发送,cookies,api-platform.com,httponly,Cookies,Api Platform.com,Httponly,我正在使用api平台构建一个api,并使用react(使用apiplatform的react模板)构建一个前台。我使用包含jwt的httponly cookie配置了身份验证和返回到客户端。但是当我的前台发出请求时,它不会发送这个cookie。。。我完全不知道为什么,我以为这是自动完成的浏览器,直到它在同一个领域 以下是我的客户端的网络历史记录示例: 我的应用程序正在运行https://localhost:3000/ 你认为这些申请有什么问题吗?或者有人知道它可能来自哪里吗? 我的应用程序和

我正在使用api平台构建一个api,并使用react(使用apiplatform的react模板)构建一个前台。我使用包含jwt的httponly cookie配置了身份验证和返回到客户端。但是当我的前台发出请求时,它不会发送这个cookie。。。我完全不知道为什么,我以为这是自动完成的浏览器,直到它在同一个领域

以下是我的客户端的网络历史记录示例:

我的应用程序正在运行https://localhost:3000/

你认为这些申请有什么问题吗?或者有人知道它可能来自哪里吗? 我的应用程序和api正在使用https,并且具有有效的证书


如果您需要任何其他信息,请随时询问,谢谢大家

我想你是和或一起工作的

Cookie忽略端口,但跨源策略不忽略端口

您可以使用两个URL(http://localhost:8443 及http://localhost:3000). 因此,您的应用程序之所以成功,是因为端口不同

xhr需要将其withCredentials属性设置为true,以便通过跨源请求发送cookie。 fetch要求将其凭证参数设置为包含

服务器端,将访问控制允许凭据设置为true

还要注意,您的cookie是samesite=strict。在生产中,如果您的应用程序和api使用两个域,它将永远不会被发送


这里真正的问题是为什么使用cookie而不是授权头?

好的,我不知道。。。当我试图解决我的问题时,我什么也没发现。 我使用cookie Http的唯一原因是:

  • 我想试试:D
  • 很多安全性文章都说它更安全,因为客户端api无法访问这些cookies,浏览器会管理这些cookies。它似乎可以对抗xss和隐藏cookie,但是如果我的cookie是用LocalFollow存储的,我想我没有这个问题,但是用localStorage我有,不是吗
  • 很酷不!我用经典的Bear auth做了太多的项目,现在可以改进了

非常感谢你的回答

好吧,我的问题终于解决了。。。我的浏览器没有发送cookie

我的身份验证请求返回承载cookie(有效,经邮递员测试)

我的cookie从身份验证请求收到

我的GET请求没有验证cookie

我错过了一些东西,但我找不到。。。
我已经设置了凭据,访问控制允许凭据,samesite是“无”的,用于将其发送到任何地方。还有别的事要做吗?或者我做了一件愚蠢的小错误?

我无法在评论中回答,因为有代码。。。 因此,它由api平台()的react admin base管理,但我的配置如下:


常量fetchHeaders={
凭据:“包括”,
};
const fetchHydra=(url,options={})=>
baseFetchHydra(url{
…选项,
标题:新标题(fetchHeaders),
});
const apiDocumentationParser=(入口点)=>
parseHydraDocumentation(入口点,{headers:newheaders(fetchHeaders)})(
({api})=>({api}),
(结果)=>{
...
},
);
const dataProvider=baseHydraDataProvider(entrypoint,fetchHydra,apiDocumentationParser,true);
因此,所有get、post等数据请求都基于此配置

但我的第一次身份验证调用是这样完成的:

login:({username,password})=>{
const request=新请求(`${entrypoint}/authentication\u token`{
方法:“POST”,
正文:JSON.stringify({username,password}),
标题:新标题({'Content Type':'application/json'}),
});
返回获取(请求)。然后((响应)=>{
如果(response.status<200 | | response.status>=300){
localStorage.removietem('isAuthenticated');
抛出新错误(response.statusText);
}
setItem('isAuthenticated','true');
});
},
好的,我找到了解决方案: 向身份验证请求添加凭据,如果未添加标头,浏览器将不会存储cookie。 第二点:

constfetchhydra=(url,options={})=>
baseFetchHydra(url{
…选项,
凭据:“包括”,
});

凭据:“包括”
不在标题选项中。。。很好

如果能解决你的问题,别忘了接受答案!它适用于邮递员,但不适用于我的应用程序(从源站“”获取的访问已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态。)但是,我的第一个问题已解决,感谢您,添加凭据头是解决方案!我无法解决它。。。它永远不会工作,当我完成它时,我将使用api平台和jsanswer为这个身份验证发布一个图腾,有代码,我不能在评论中格式化我不知道这个客户端。在localhost:3000上,打开一个web控制台并键入
xhr=new-XMLHttpRequest();xhr.withCredentials=true;xhr.open('GET','http://localhost:8443'); xhr.send()。如果失败,我不知道。它不起作用,我发现添加
凭据:“包括”
模式:“cors”
使请求失败,如果我发送凭据,则不应使用*。。。但这是一个地狱。。。