Node.js 在我的应用程序中同步/保护敏感数据的正确方法是什么? 背景

Node.js 在我的应用程序中同步/保护敏感数据的正确方法是什么? 背景,node.js,security,electron,credentials,Node.js,Security,Electron,Credentials,我已经离开web应用程序开发领域几年了,最近又回到了这个领域。关于执行以下任务的最佳安全实践,我有几个问题 我正在开发一个electron(node.js)应用程序,该应用程序将使用我的远程应用服务器验证用户凭据。在我的服务器上,我有一个MySQL数据库,它将存储用户帐户和应用程序数据的通常分类。此外,electron应用程序将有一个本地sqlite数据库,我将定期更新该数据库,以保持与远程MySQL服务器的同步。Sqlite数据库允许应用程序在离线环境中使用electron应用程序或远程服务器

我已经离开web应用程序开发领域几年了,最近又回到了这个领域。关于执行以下任务的最佳安全实践,我有几个问题

我正在开发一个electron(node.js)应用程序,该应用程序将使用我的远程应用服务器验证用户凭据。在我的服务器上,我有一个MySQL数据库,它将存储用户帐户和应用程序数据的通常分类。此外,electron应用程序将有一个本地sqlite数据库,我将定期更新该数据库,以保持与远程MySQL服务器的同步。Sqlite数据库允许应用程序在离线环境中使用electron应用程序或远程服务器停机时继续运行。我希望应用程序先联机,然后进行脱机回退

一旦用户在electron应用程序中进行身份验证,应用程序将允许用户完成其工作,当用户完成后,他们的工作将通过将该工作发布到第三方的API提交给第三方。用户首次登录时,将要求他们使用OAuth2通过第三方API进行身份验证,并且在成功完成此身份验证过程后,第三方将提供API访问令牌。该令牌将存储在远程MySQL数据库以及本地sqlite数据库中

这是踢球的人。将有多台机器运行此electron应用程序,因此在所有这些安装之间保持一切同步是必要的,因为同一用户可能在给定的一天使用这些机器中的任何一台

问题 有了这些背景信息,以下是我的问题:

  • 如果我在将用户密码存储到数据库之前对其进行哈希和salt处理:SHA-512仍然是一种安全哈希,还是有其他更好的算法

  • 第三方API令牌本质上是用户访问第三方API的密码。我打算像对待密码一样对待它。由于哈希是单向的,因此不是一个选项,如何最好地加密数据库中存储的API令牌?我目前的想法是将AES与随机生成的长字符串一起使用,该字符串作为密钥存储在服务器应用程序的配置文件中。在这种情况下,如果数据库被破坏,则密钥将不会包含在数据中。要获取密钥,必须破解服务器本身。这是最好的方法吗

  • 在应用程序启动时或手动触发时,本地electron应用程序将查询我的远程服务器,以确定自上次更新本地sqlite数据库以来,数据库是否有任何更改。如果有更改并且需要本地更新,远程服务器将返回一个响应,其中包含自上次更新以来已更改的所有内容(可能是JSON格式)。本地应用程序和远程服务器之间的连接将使用TLS(https)加密。这是否足以保护本地应用程序和远程服务器之间的数据交换(包含密码散列等),或者JSON对象是否应该进一步加密?这是同步数据的好方法吗

  • 我感谢所有的帮助。我对当前的一些最佳实践有点不了解,这是我很长一段时间以来第一个实际的生产应用程序,所以我想确保一切都正常完成