将令牌从服务器传递到客户端并以安全方式存储

Posted

技术标签:

【中文标题】将令牌从服务器传递到客户端并以安全方式存储【英文标题】:Passing token form server to client side and storing in secure way 【发布时间】:2018-03-15 04:04:42 【问题描述】:

我使用 passport.js 在服务器 node.js 上进行了身份验证并获得了令牌。为了在客户端呈现页面,我需要将令牌与要在客户端显示的图像 URL 一起传递。如何使用 Express 框架安全地将令牌从服务器传递到客户端。

【问题讨论】:

【参考方案1】:

标准方式是使用 https 连接并将其作为纯 json 数据发送。

对于存储,您可以选择 Cookie 和本地存储。 This article from 2016 建议使用设置了 HttpOnly cookie 标志的 cookie。

为了深入挖掘,this *** question and answer 比较了两个选项的安全性,没有强烈推荐任何一种方式。

【讨论】:

如果我将令牌存储在用户对象中,然后在渲染中传递用户对象怎么办?例如: res.render('signin.jade', user: req.user);这样我可以将本地人传递给玉文件,并可以在客户端访问 javascript 中的令牌 由于您特别询问了将令牌从客户端传递到服务器的问题,我假设您的意思是在 ajax 调用中。在呈现的 html 中传递它也可以工作。一旦令牌到达客户端,您打算如何处理它? 您可能希望将其存储在 cookie 或本地存储中。 (否则,用户每次加载页面时都必须登录。)通常使用的一种方法是使用 ajax 调用登录,将 cookie 存储在客户端上,然后请求登录后的新页面墙。存储令牌后,每个后续请求都将令牌自动传递回服务器,或者使用 cookie,或者在 auth 标头中。 是的,我可以在 cookie 和本地存储中存储令牌,但是将令牌存储在那里安全吗? 无论安全与否,这些都是您唯一的选择!但就安全而言,意味着黑客无法读取,一般来说它们的安全性不亚于浏览器窗口。因此,您愿意发送给用户的任何内容都不会因为将其存储在本地存储或 cookie 中而降低安全性。这样想——你想要用户拥有这个令牌,你是故意把它给他们的。这不是你想对他们隐瞒的秘密。您可能会想到用于生成令牌的加密密钥; 那个,你永远不想通过网络发送出去。

以上是关于将令牌从服务器传递到客户端并以安全方式存储的主要内容,如果未能解决你的问题,请参考以下文章

如何将(声明)安全令牌传递给启用 WIF 的 WCF 服务?

将Google访问令牌从客户端传递到服务器

spring boot - 假装客户端发送基本授权标头|将 jwt 令牌从一个微服务传递到另一个微服务

如何将接收到的(承载)访问令牌传递给生成的 REST 客户端,以调用安全的 API-Gateway 端点

密码更改需要来自 RESTful 令牌服务的响应

在重定向期间将令牌从 API 传递到前端