【问题标题】:HttpOnly cookies not sent by requestHttpOnly cookie 不是按请求发送的
【发布时间】:2017-06-20 11:16:36
【问题描述】:

我想使用HttpOnly cookie,我在Java中设置如下:

...

Cookie accessTokenCookie = new Cookie("token", userToken);
accessTokenCookie.setHttpOnly(true);
accessTokenCookie.setSecure(true);
accessTokenCookie.setPath("/");
response.addCookie(accessTokenCookie);
Cookie refreshTokenCookie = new Cookie("refreshToken", refreshToken);
refreshTokenCookie.setHttpOnly(true);
refreshTokenCookie.setSecure(true);
refreshTokenCookie.setPath("/");
response.addCookie(refreshTokenCookie);

...

我得到了带有 cookie 的客户端响应,但是当我发送下一个请求时,我的请求中没有 cookie。也许我错过了一些东西,但据我了解,这些HttpOnly cookie 必须由浏览器在到达定义路径的每个请求(JavaScript 无权访问这些 cookie)时发送回。

我有以下请求标头:

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8,hu;q=0.6,ro;q=0.4,fr;q=0.2,de;q=0.2
Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Connection:keep-alive
Content-Length:35
content-type:text/plain
Host:localhost:8080
Origin:http://localhost:4200
Referer:http://localhost:4200/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
X-Requested-With:XMLHttpRequest

以及以下响应标头:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:4200
Access-Control-Expose-Headers:Access-Control-Allow-Origin, Content-Type, Date, Link, Server, X-Application-Context, X-Total-Count
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Content-Length:482
Content-Type:application/json;charset=ISO-8859-1
Date:Fri, 03 Feb 2017 13:11:29 GMT
Expires:0
Pragma:no-cache
Set-Cookie:token=eyJhbGciO;Max-Age=10000;path=/;Secure;HttpOnly
Set-Cookie:refreshToken=eyJhb8w;Max-Age=10000;path=/;Secure;HttpOnly
Vary:Origin

同样在客户端,我使用 Angular2 中的 withCredentials: trueX-Requested-With:XMLHttpRequest 作为请求标头。

而且是跨域。

【问题讨论】:

  • 嗨!我遇到了同样的问题。当我删除 HTTP only 标志时,它就可以工作了。你有没有找到其他解决方法?
  • 通过从 cookie 中删除 Secure 标志,解决了问题
  • 非常感谢!!它有效

标签: java angular cookies jwt cookie-httponly


【解决方案1】:

是的,您的 cookie 是正确的,您的浏览器应在 cookie 未过期时自动发送该 cookie,并且 httpOnly 标志表示无法通过 JavaScript 访问或操作它。

然而

您需要确保您发送的cookie不是跨域的,如果您需要跨域,则需要以不同的方式处理。

【讨论】:

  • 是的,它是一个跨域cookie,我该如何处理?
  • 就您的情况而言,我个人会使用 JWT 和标头,但如果您必须使用跨域 cookie,请尝试 stackoverflow.com/questions/3342140/cross-domain-cookies
  • 通过从 cookie 中删除 Secure 标志,解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2021-08-05
相关资源
最近更新 更多