node.js - 如何建立完全安全的登录:我需要 SSL 吗?
问题描述
语境
我正在构建一个项目以更好地了解登录/安全性,而 SSL 真的让我感到困惑。到目前为止,我有一个前端 (vue.js)、一个 API (node/express) 和一个数据库 (postgreSQL)。
这是一般的身份验证流程:
- 当用户登录时,他们会向 API 发送电子邮件和密码(通过 Axios)。
- API 在数据库中查询匹配的用户名,然后使用 bcrypt.compare 检查数据库中散列的密码。
- 如果成功,API 会签署 JWT 并将其发送给客户端。
- 然后客户端将 JWT 保存在本地存储中并用于将来的查询。
问题)
到目前为止,我认为除了第一步之外,以上所有都是最佳实践。从阅读中,到目前为止,我已经完成了客户端需要 SSL 来安全地向 API 发送密码。是这样吗?我的服务器是否也需要是 SSL 或只是客户端/主机?
我最终将尝试将 firebase 托管(自动为 SSL)用于前端,将 heroku 用于 API 和数据库。如果有更安全的选择,我愿意接受建议。
另外,总的来说,我对所有这些安全性东西都是新手-如果我遗漏了任何东西或者其他东西不安全,我会喜欢这个建议!
解决方案
SSL 在两点之间创建安全连接。在我们的客户端和服务器之间的场景中。经过一些初始协商后,客户端以只有服务器可以解密的方式对其消息进行加密。服务器对其答案或自己的问题也是如此。通过在这两个端点之间使用 SSL,除了客户端和服务器之外,没有人可以读取消息。
这很重要,因为在客户端和服务器之间发送的消息实际上被中间的更多机器/进程看到。因此,数十个其他进程可以看到该消息,如果该消息未加密,则意味着所有这些进程都可以确切地知道消息中的内容。当客户端和服务器通过 SSL 进行通信时,其他进程仍然可以看到这些消息,但它们无法解密它们。
对于您的具体问题:客户端打开与服务器的安全连接。客户端和服务器都需要支持这一点。如果您编写自定义服务器,这意味着您需要确保它具有 SSL 证书。这些天免费获得这些的一个非常常见的地方是letsencrypt.org。
推荐阅读
- vb.net - 如何在 VB.NET 项目中对应用程序启动表单列表进行排序
- ruby - ActiveJob rescue_from 返回成功而没有提升和失败
- php - 学说合并没有按预期工作
- c++ - 重启系统后我的dll服务消失了
- python - 在某些单词之后拆分或分区字符串
- wordpress - Vue.js Axios Wordpress 调用
- azure - Azure 函数抛出 Microsoft.AspNetCore.Server.Kestrel.Core:已添加具有相同密钥的项
- github - GitHub 声称已经有 11 亿的贡献。什么是贡献?
- java - Minio Gradle 依赖 android javax.annotation.CheckReturnValue
- php - AJAX 在 localhost 中有效,但在实时网络中无效