2016-06-21 42 views
0

我是新手,试图设置节点&身份验证时创建JWT。带节点和护照的JWT:重新启动服务器

我希望能够构建一个“无状态身份验证机制”来减少回到数据库的需求。如果没有共享秘密或JWT保存在数据库中,我假设服务器是否重新启动,所有发布的JWT(登录用户)都失效,因此需要一个新的JWT for所有用户访问受保护的路由。我不希望用户在每次重新启动服务器或新的实例时都重新登录。

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

问题:

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

  2. 但是,如果将共享密钥传递给Node环境并不是一个好策略,那么我对所有建议都有所耳闻?

,当我说我的意思是共享的秘密更新 “键(S)”。我会更新问题,以免引起混淆。

+0

为什么你需要将密钥存储在数据库中?识别用户所需的信息通常存储在JWT本身中,服务器只需要拥有密钥的秘密来验证密钥的信息没有改变。 请参阅[本页](https:// jwt。io /),用于构成智威汤逊的视觉表示。 – WillS

+0

对不起 - 我更新了问题。 – user1107173

回答

1

实际上通过密钥作为环境是这种应用程序的推荐方式。

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

通常情况下,您不会经常旋转按键,通常情况下,假设您控制自己的环境,每月旋转一次按键。

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

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

我通常使用环境将这种信息传递给我的节点应用程序,我将它用于JWT,AWS密钥,SMTP凭证等。它使您的代码解耦并避免可能的错误,如将私钥推入公共代码版本像github这样的系统。