当 API 调用需要以纯文本形式发送密码时,将密码存储在数据库中的最佳方法是啥?

Posted

技术标签:

【中文标题】当 API 调用需要以纯文本形式发送密码时,将密码存储在数据库中的最佳方法是啥?【英文标题】:What is the best way to store password in database when API call requires sending of password in plain text?当 API 调用需要以纯文本形式发送密码时,将密码存储在数据库中的最佳方法是什么? 【发布时间】:2011-12-23 14:06:36 【问题描述】:

我正在用 Django 编写一个与稍后阅读列表 API (http://readitlaterlist.com/api/docs/) 交互的网络应用程序。但是,所有 API 调用都需要在每个请求中发送用户名和密码。为了做到这一点,我似乎需要将用户的密码以纯文本形式存储在我的数据库中。我错过了什么,还是在这种情况下这是唯一可能的方法?是否有某种方法可以在我的数据库中存储加密密码,但在进行 API 调用时能够发送它的解密版本?如果没有,那么我应该遵循哪些最佳实践来保护用户的密码?

我很确定这不是唯一需要以纯文本形式发送密码的服务。我有兴趣了解开发人员通常如何处理这类服务。我是 Web 开发的新手,因此感谢任何帮助或指点。

【问题讨论】:

我问了一个类似的问题:***.com/questions/5791083/… 【参考方案1】:

您的用户是否必须登录您的网站才能使用它?如果您还使用密码身份验证方案,则可以在此基础上加以利用。使用您站点的登录密码作为对称密钥密码中的密码来加密 api 密码。那么您只需要存储用户密码的哈希值(到您自己的站点)和远程 api 的加密密码。

【讨论】:

这听起来确实是个好主意。我现在没有为我的网站使用登录密码,但如果我以后这样做,那么我一定会研究这种方法。【参考方案2】:

永远不要以纯文本形式保存密码。您可以对密码进行加密和解密,但问题是任何有权访问您服务器的人通常都可以访问您用于加密和解密的密钥,因此它并不安全。

另一种方法是要求他们输入密码并将其保存在加密的 cookie、会话变量或其他在他们退出您的应用程序时会过期的东西中。这样做的缺点是他们每次使用您的应用程序时都必须输入密码。

【讨论】:

会话变量/加密 cookie 听起来很有希望。我会调查那些。谢谢。

以上是关于当 API 调用需要以纯文本形式发送密码时,将密码存储在数据库中的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

比在配置文件中以纯文本形式存储 mysql 密码更好的方法?

为啥不应该在数据库中以纯文本形式存储密码? [复制]

PHP - 安全地存储外部服务的密码?

为spring webservice添加密码安全性

数据库凭据以纯文本形式存储可以吗?

如何通过 HTTP 安全地发送密码?