我有一个应用程序,它从用户那里获取csv,将其转换为json,并将json文件保存在AWS上的S3桶中。然后我使用oracle的restful服务将数据推送到oraclejde。
用户在没有事先"批准"的情况下无法上传文件——目前这是一个手动过程,但他们的电子邮件需要首先添加到S3存储桶中网络应用程序检查S3中是否存在电子邮件,然后允许文件上传,如果不存在,则拒绝文件上传。
我现在还没有设置任何其他"用户身份验证"。
接下来,为了从外部API获取令牌,我需要向其提供服务帐户用户名和密码,目前,由于它仍在开发中,我将用户名和密码保存在服务器端nodejs的一个对象中,并将其传递到API调用以获取令牌。
目前,我们不打算让用户登录,也就是说,我如何确保用户名和密码的安全,但仍然能够获得"允许上传的经过验证的电子邮件"的令牌?
基本上,我认为将它保存在可变服务器端节点中不是一个好主意,所以寻找另一种方法将它存储在某个地方,并且仍然能够调用api。
目前我们不打算让用户登录,因此说我如何确保用户名和密码的安全,但仍然能够获得"允许上传已验证电子邮件"的令牌?
你不能。除非我误解了什么,否则这些不是"经过验证的电子邮件",而是"预先批准的电子邮件地址"。您仍然需要对用户进行身份验证,以帮助保护应用程序的安全。
那么我仍然要对硬编码的用户名和密码进行哈希和加盐处理并保存到数据库吗?
您不能对密码进行加盐和散列处理,因为您打算重复使用原始密码。这就把保护密码的责任推到了你身上。不要玩那个游戏。许多人对许多不同的帐户重复使用相同的密码。你想给你的用户发一封电子邮件,让他们知道你有安全漏洞,他们需要重置所有密码吗?
基本上,我认为将其保留在可变服务器端节点中不是一个好主意
没错,这不是一个好主意。例如,如果你的服务器坏了怎么办?然后你就会失去这个价值。更不用说RAM的额外成本了,因为所有东西都会存储在内存中。
解决方案
- 将凭据存储在数据库中。它可以是SQL或NoSQL,服务器可以是您喜欢的任何形式
注意事项
- 在存储密码之前不要忘记对其进行散列
- 哈希时加些盐
- 要验证密码,只需对从客户端获得的密码进行散列,并将其与存储在数据库中的散列进行比较
- 对客户端和服务器之间的流量使用HTTPS