0

我是 Node 新手,并尝试设置 Node 和 Passport 以在身份验证时创建 JWT。

我希望建立一个“无状态认证机制”来减少对数据库的往返需求。

通过“无状态”,如果没有共享机密或 JWT 保存在数据库中,我假设如果服务器重新启动,所有发布的 JWT(登录用户)都将失效,因此需要一个新的 JWT 供所有用户访问受保护的路线。我不希望用户在每次服务器重新启动或新实例旋转时重新登录。

我相信我可以将静态共享密钥传递给 Node 环境,我每次都可以使用它来生成不影响服务器重启的相同 JWT。

问题:

  1. 如果一个好的做法是传递共享密钥,我应该在哪里以及如何创建这个共享密钥?我必须传递哪些共享秘密?

  2. 但是,如果将共享密钥传递给 Node 环境不是一个好策略,我是否愿意听取建议?

更新

当我说“密钥”时,我的意思是共享秘密。我会更新这个问题,以免造成混淆。

4

1 回答 1

1

实际上,将密钥作为环境传递是此类应用程序的推荐方式。

因为环境仅对正在运行的应用程序可见,并减少了泄漏密钥的可能性(与其他应用程序代码提供的配置文件相比)。

通常你不会经常轮换密钥,假设你控制你的环境,通常每个月轮换一次。

但请记住,密钥仅用于证明令牌是由您签名的,通常最好在令牌中仅包含少量信息(出于性能原因)。所以你仍然需要去数据库中检索有关用户本身的额外信息。您可以在令牌中添加所有用户信息,但请记住,需要为每个请求发送令牌,这会增加开销。

如果您使用像supervisord这样的流程管理器,您可以在那里设置环境并为配置文件授予适当的权限以避免密钥泄漏。

我通常使用环境将此类信息传递给我的节点应用程序,我将其用于 JWT、AWS 密钥、SMTP 凭证等。它使您的代码保持解耦并避免可能出现的错误,例如将私钥推送到 github 等公共代码版本控制系统。

于 2016-06-21T20:29:50.020 回答