将 jwt 保存在 cookie 中以将其传递到本地存储是不是安全?
Posted
技术标签:
【中文标题】将 jwt 保存在 cookie 中以将其传递到本地存储是不是安全?【英文标题】:Is it bad security to save jwt in cookie to pass it to local storage?将 jwt 保存在 cookie 中以将其传递到本地存储是否安全? 【发布时间】:2018-02-22 20:11:43 【问题描述】:为了让我的 twitter 登录以使用 jwt 会话和 angularjs,我创建了一个带有 twitter 用户名和显示名称的 jwt,将其作为 cookie 传递并将其保存到本地存储。以下是一些相关代码:
登录用户并保存cookie:
app.get('/login/twitter', passport.authenticate('twitter'));
app.get('/login/twitter/callback', function(req, res)
passport.authenticate('twitter' , session: false , function(err, user, info)
if(err)
console.log(err);
var token;
token = user.generateTwitterJwt();
// res.status(200);
// res.json(
// "token" : token
// );
res.cookie('jwt' , token);
res.render('login.jade');
)(req, res);
);
保存到本地存储并删除 cookie:
$scope.twitterTest = function()
var jwtCookie = $cookies.get('jwt');
authenticationService.saveToken(jwtCookie).error(function()
if(err)
console.log(err);
).then(function()
$cookies.remove('jwt');
var url = '/profile';
$window.location.href = url;
);
我想知道这样做是否有任何缺点。有什么安全问题吗?我正在尝试使用 jwt 和 angularjs 保存到本地存储进程,因为这是我设置本地登录的方式。
【问题讨论】:
为什么不直接把token存到本地存储呢? @RaphaelMüllner 我不知道必须从 Twitter 回调页面获取 jwt,因为发布请求被阻止 我不得不承认我对AngularJS一无所知,但我不认为你的技术对安全性有很大影响。在将令牌保存到本地存储之前,我觉得在会话中“缓冲”令牌并不干净。 【参考方案1】:您可以使用浏览器 sessionStorage 代替 localStorage,SessionStorage 更安全,因为它会随着浏览器会话结束而被删除。并直接将其存储在 sessionStorage 中而不是 cookie 中,这种情况下不需要 cookie。
【讨论】:
以上是关于将 jwt 保存在 cookie 中以将其传递到本地存储是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
如何模拟 JWT 令牌以将其与 Mockito 和 Spring Boot 一起使用
即使使用 JSON.parse,Snowflake 也无法将对象绑定到查询中以将其插入到变体列中
将 JWT RefreshToken 作为 Set-Cookie 发送
身份验证(cookie+session & jwt验证机制)
如果用于认证的JWT令牌保存在HTTP-Only cookie中,你如何从cookie中读取它,以便我可以在请求头中包含它?