【问题标题】:http-only cookie not being set on React client in Azure未在 Azure 的 React 客户端上设置 http-only cookie
【发布时间】:2023-03-03 03:04:01
【问题描述】:

我在这里看到了几个类似的问题,但似乎没有一个解决方案或特定设置与我的完全匹配。

我有一个 React 客户端,它通过 apollo 调用后端框架 Web API,它设置了一个仅限 http 的 cookie,我希望在所有后续请求中将其发回。后端服务配置为接受客户端域作为 CORS 来源和本地以及部署到测试服务器时,这一切正常。

我现在已将客户端和后端服务部署到单独的 Azure 应用服务,并且 cookie“似乎”没有在客户端上设置。

在初始响应标头中,我可以看到在 set-cookie 中设置的 cookie,但它不会包含在后续请求中,也不会出现在 chrome 工具的应用程序选项卡中。

我的 Apollo 调用指定 withCredentials: true

知道这可能是什么原因吗?

编辑。 从初始 API 请求返回的响应标头是:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://my-app-service.azurewebsites.net
Cache-Control: no-cache
Content-Encoding: gzip
Content-Length: 256
Content-Type: application/json; charset=utf-8
Date: Fri, 29 Oct 2021 12:04:27 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/10.0
Set-Cookie: {Cookie-Name}={JWT-Token}; expires=Fri, 29-Oct-2021 12:24:27 
GMT; path=/; HttpOnly
Vary: Accept-Encoding
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

【问题讨论】:

  • 您能分享一下应该设置 cookie 的 API 响应吗?您可以在浏览器开发者工具中检查 --> 网络。控制台中是否有任何相关错误?
  • @fvd2 我已添加到原帖中
  • 您是否将 sn-p 中的实际 {Cookie-Name} 和 {JWT-Token} 值替换为这些占位符值,即客户端是否接收到正确的 cookie 名称和值?

标签: reactjs azure cookies


【解决方案1】:

要将仅 http 的 cookie 传递给 chrome 浏览器中所有选项卡上的所有后续请求:

后端(服务器):

前端(客户端):

  • XMLHttpRequest.withCredentials 标志设置为true,这可以根据使用的请求-响应库以不同的方式实现:

  • jQuery 1.5.1xhrFields: {withCredentials: true}

  • ES6 fetch()credentials: 'include'

  • axios:withCredentials: true

  • 用这些占位符值正确替换 sn-p 中的实际 {Cookie-Name} 和 {JWT-Token} 值。

【讨论】:

  • 做所有这些。它在本地和本地 Windows Server 上工作正常,只是在部署到 Azure 应用服务时它不起作用
  • @StewartAlan - 你遇到了什么错误?
  • 没有收到错误,只是没有设置 cookie。问题似乎是我已经部署了我的客户端应用程序和后端服务以分离 azure 应用程序服务,尽管将允许的 CORS 源设置为我的客户端域,但这导致 cookie 未设置。我将客户端部署到同一个应用服务,现在一切正常。
猜你喜欢
  • 2020-10-21
  • 2012-08-17
  • 2014-01-04
  • 2022-08-20
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
相关资源
最近更新 更多