我应该在哪里存储访问令牌

时间:2017-04-19 12:51:33

标签: node.js botframework facebook-messenger

我目前正在为Facebook Messenger上的聊天机器人工作。我正在使用Microsoft bot框架,代码是用node.js编写的。

我正在通过api与数据库进行交互。对于每个请求,我必须在请求标头内传递访问令牌。我在网上看到你通常会在cookie或网络存储中存储这样的令牌。但是我也发现你不能在Facebook Messenger上做到这一点。我在考虑将访问令牌存储在变量中,但我担心这可能不安全。 是否有其他安全方式来存储访问令牌?

我对node.js相当新,这是我第一次使用令牌。非常感谢帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用 session.userData 来保存数据库令牌。如果您担心它是安全的,那么在保存之前对其进行加密。

session.userData.dbtoken = encryptToken(token);

以后可以在需要时检索并使用该令牌:

var token = decryptToken(session.userData.dbtoken);
var databaseData = getUserDataFromDatabase(token);

https://docs.botframework.com/en-us/core-concepts/userdata/

或者,使用像NeDB这样的本地数据库:https://github.com/louischatriot/nedb这将是最安全的选项,因为数据库将驻留在您的服务器上。

答案 1 :(得分:0)

假设此令牌不变,您可以将其存储为环境变量,例如TOKEN,并以process.env.TOKEN的形式在nodejs应用程序中访问它。

答案 2 :(得分:0)

我建议使用快速会话。出于以下原因。 使用给定的选项创建会话中间件。

注意会话数据不会保存在cookie本身中,而只会保存会话ID。会话数据存储在服务器端。

注意从版本1.5.0开始,该模块不再需要使用cookie解析器中间件。现在,该模块直接在req / res上读写cookie。如果此模块与Cookie解析器之间的秘密不同,则使用cookie解析器可能会导致问题。

警告默认的服务器端会话存储MemoryStore并非专门为生产环境设计。在大多数情况下,它将泄漏内存,不会扩展到单个进程,而是用于调试和开发。