【问题标题】:What's the best way to store an auth token for a remote API in a NodeJS app?在 NodeJS 应用程序中存储远程 API 的身份验证令牌的最佳方式是什么?
【发布时间】:2020-03-27 16:43:08
【问题描述】:

我正在编写一个在服务器上运行并按计划查询远程 API 的 NodeJS 应用程序。此 API 需要身份验证,并为我提供一个有效期为数小时的令牌。

存储和重用此令牌的最佳方式是什么,并且仅在它过期时重新进行身份验证?

这是我编写的第一个 Node 应用程序,所以我不确定如何提问。是否有一个通用库可以为我处理这个问题?

如果不是,并且我必须编写自己的模块,那么存储凭证的可接受方式是什么?我应该使用全局变量、像 Redux 这样的状态存储,还是我离题了?

【问题讨论】:

  • 您可以将自己的token(作为普通变量)存储在模块中,并在后续HTTP请求失败时刷新,然后重新运行HTTP请求;或者像这样做一些更优雅的事情:stackoverflow.com/questions/51646853/…
  • 服务器重启时是否需要保留这个token?如果是这样,您将需要一种将其保存到磁盘的方法。否则,某处的一些变量。
  • 不,保留令牌并不重要。我喜欢@CharlieSchliesser 不跟踪到期时间的想法,如果请求失败则只刷新令牌。

标签: node.js rest api authentication state


【解决方案1】:

嗯,这真的取决于代码的上下文。如果您的服务器只有这些令牌之一,那么您只需将其保存在模块级 Javascript 变量中,您就可以从那里使用它。

如果有多个令牌,每个令牌都与进入服务器的其他请求相关联,那么您需要找到某种方法将正确的令牌与正确的请求相关联。有很多方法可以做到这一点,但哪种方法最合适取决于您尝试将每个令牌与什么相关联。

对于一个或几个令牌,没有理由将它们放在某个数据存储中。一个 Javascript 变量就可以了。我能想到使用实际数据存储的唯一原因是您是否需要这些令牌来保持服务器重新启动。在这种情况下,您可以只读取 JSON 并将其写入单个文件,然后在服务器重新启动时读取该文件。

如果不是,并且我必须编写自己的模块,那么存储凭证的可接受方式是什么?我应该使用全局变量吗?

没有。不是全局变量。模块级变量可能有意义。

像 Redux 这样的状态存储

我看不出有什么理由去做这样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多