Javascript 如何在浏览器中存储JWT?

Javascript 如何在浏览器中存储JWT?,javascript,json,node.js,jwt,Javascript,Json,Node.js,Jwt,我第一次使用JSON Web令牌(JWT)。我正在使用Hydra Express框架制作Node.js应用程序。我想使用JWT进行身份验证。根据文档,我将把JSON令牌返回到前端 var-tokenData={ 用户名:req.body.username, }; var结果={ 用户名:req.body.username, token:jwt.sign(tokenData,'secret',{expiresIn:60*60}) }; res.json(结果); 但是我不知道如何将这个JSON令

我第一次使用JSON Web令牌(JWT)。我正在使用Hydra Express框架制作Node.js应用程序。我想使用JWT进行身份验证。根据文档,我将把JSON令牌返回到前端

var-tokenData={
用户名:req.body.username,
};
var结果={
用户名:req.body.username,
token:jwt.sign(tokenData,'secret',{expiresIn:60*60})
};
res.json(结果);
但是我不知道如何将这个JSON令牌保存到我的浏览器头中,这样它就不会丢失,并且会与头一起再次发送到后端。
如何将其保存在我的浏览器存储中,并在每次将请求发送到后端时将其添加到请求头?

您可以使用HTML5 web存储cookie存储JWT令牌,并在您想将请求发送到web api时从中读取

这将帮助您决定应用程序的最佳匹配


希望能有帮助

您可以使用HTML5 web存储cookie存储您的JWT令牌,并在任何时候向web api发送请求时从中读取

这将帮助您决定应用程序的最佳匹配


希望能有帮助

当它返回时,将整个令牌存储在会话存储中

sessionStorage.token = json.access_token;
要访问有效负载,请将jwt令牌拆分为其header.payload.signature部分,并仅获取有效负载

var enc = json.access_token.split(".")[1];
然后解析base64

var payload = JSON.parse(window.atob(enc));
然后,您可以获取并使用经过验证的有效负载数据
payload.sub、payload.role…等返回时将整个令牌存储在会话存储中

sessionStorage.token = json.access_token;
要访问有效负载,请将jwt令牌拆分为其header.payload.signature部分,并仅获取有效负载

var enc = json.access_token.split(".")[1];
然后解析base64

var payload = JSON.parse(window.atob(enc));
然后,您可以获取并使用经过验证的有效负载数据 payload.sub、payload.role…等

安全建议:

尽量简短: Cookie(仅http和安全标志)易受CSRF攻击,但不易受XSS攻击。 localstorage中的JWT易受XSS攻击,但不易受CSRF攻击

您最好将风险降至最低: 将JWT存储在cookie中 将csrf_令牌存储在localstorage中

要使其成为无状态: 将csrf_令牌包括在JWT有效负载中,并检查服务器端JWT csrf_令牌和从本地存储读取并在标头中提供的csrf_令牌是否匹配

这需要攻击者通过XSS获取csrf_令牌(例如,您在站点中使用了受损的第三方js库,或者不应用js) 然后他需要使用csrf_令牌触发csrf请求(例如网页/电子邮件中嵌入的img src标记或表单)

这种组合使攻击者更加困难(但并非不可能)

它提供与使用csrf_令牌的正常基于会话的身份验证相同的安全级别,但不需要状态。

安全建议:

尽量简短: Cookie(仅http和安全标志)易受CSRF攻击,但不易受XSS攻击。 localstorage中的JWT易受XSS攻击,但不易受CSRF攻击

您最好将风险降至最低: 将JWT存储在cookie中 将csrf_令牌存储在localstorage中

要使其成为无状态: 将csrf_令牌包括在JWT有效负载中,并检查服务器端JWT csrf_令牌和从本地存储读取并在标头中提供的csrf_令牌是否匹配

这需要攻击者通过XSS获取csrf_令牌(例如,您在站点中使用了受损的第三方js库,或者不应用js) 然后他需要使用csrf_令牌触发csrf请求(例如网页/电子邮件中嵌入的img src标记或表单)

这种组合使攻击者更加困难(但并非不可能)


它提供与使用csrf_令牌的正常基于会话的身份验证相同的安全级别,但不需要状态。

基于Chris的回答:

  • 决不能将JWT存储在本地存储中
  • 事实上,它们甚至不应该存储在您的cookie中,除非您能够实施非常严格的CSRF保护
    • JWT作为id_令牌与您的用户凭据类似
    • JWT作为访问令牌与会话令牌类似

    最安全的选项是在内存中

    基于克里斯的回答:

  • 决不能将JWT存储在本地存储中
  • 事实上,它们甚至不应该存储在您的cookie中,除非您能够实施非常严格的CSRF保护
    • JWT作为id_令牌与您的用户凭据类似
    • JWT作为访问令牌与会话令牌类似

    最安全的选项是在内存中

    你可以使用cookies,localStorage,甚至WebSQL,如果你愿意的话,我想任何浏览器存储都可以。尽管如此,我还是建议您阅读这篇文章:您可以使用cookies、localStorage,如果您愿意,甚至可以使用WebSQL,我想任何浏览器存储都可以。尽管如此,我还是建议您阅读这篇文章: