首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot + Angular 9 JWT令牌存储在HTTPOnly Cookie中

Spring Boot + Angular 9 JWT令牌存储在HTTPOnly Cookie中
EN

Stack Overflow用户
提问于 2020-06-17 14:13:51
回答 2查看 802关注 0票数 2

我使用的是带有Angular 9的Spring boot和无状态会话实现。应用程序正在成功执行登录和注册功能。String boot在每次登录请求时生成令牌(JWT)。登录后,当我尝试运行第二个TAB的应用程序时,它再次要求我登录。为了解决这个问题,我将令牌保存在本地存储中,然后在单击另一个TAB时,角度代码能够从本地存储中选择令牌。但是经过一些研究和开发,我开始知道应该使用HTTPOnly Cookie来代替本地存储。有人能帮我在Angular 9和Spring Boot上使用HTTP-only cookie吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-10-22 03:25:27

下面是创建HTTP Only cookie并将其附加到响应的示例代码。至少需要传入HttpServletResponse才能将cookies附加到标头。您可以使用ResponseEntity或其他方法返回响应正文中的任何内容。

代码语言:javascript
复制
@PostMapping("/refresh_token")
public ResponseEntity refreshToken(HttpServletResponse response)
{
   //create cookie for refresh token
   Cookie refreshTokenCookie = new Cookie("refresh_token", refreshToken);
   refreshTokenCookie.setHttpOnly(true);
   refreshTokenCookie.setSecure(true); //only allows HTTPS
   refreshTokenCookie.setPath("/");
   refreshTokenCookie.setDomain("api.lsp.com"); //restrict domain

   response.addCookie(refeshTokenCookie);

   return ResponseEntity(HttpStatus.OK);
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-17 23:41:52

实际上,刷新令牌应该仅设置为cookie http而不是本地存储,正如这里很好地解释的那样,为回答您的问题,@ JWT refresh token flow 521990的响应是cookie实现的一个很好的例子:

  • 只需小心将refreshTokenCookie.setSecure(false);设置为开发模式,因为您没有使用HTTPS
  • 如果您没有显式地使用setDomain(),那么请求的域将是默认的

cookie然后将path设置为refreshTokenCookie.setPath("/");将使其成为可在任何地方访问的全局cookie<>F210>

在开发模式下,您需要一些CORS配置才能在浏览器中设置cookie。至少在您的Java控制器@CrossOrigin(origins = "http://localhost:4200", allowCredentials = "true")中需要以下配置(或者您可以在不同的文件中以更全局的方式进行此配置)

最后,在Angular应用程序中,向需要设置或使用httponly { withCredentials: true }的请求添加选项cookie

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62422527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档