API 密钥 PHP / MYSQL 的功能
Posted
技术标签:
【中文标题】API 密钥 PHP / MYSQL 的功能【英文标题】:The Function of an API Key PHP / MYSQL 【发布时间】:2015-07-30 17:48:01 【问题描述】:关于使用 php/mysql 的 API 密钥的快速问题。在过去的几天里,我读了很多书,但只需要进一步澄清和一些最佳实践指南,因为我对 html、JS、JQUERY、PHP / MYSQL 还很陌生。
我的服务器端代码是 PHP,它连接到 MYSQL 数据库。该数据库有一个users
表,它将存储诸如id
、username
、password
(通过PHP5 使用password_hash(),因此它不存储明文值)和api_key
等列。我还将考虑添加一些诸如last_seen
和last_login
以提高安全性。
我希望使用 API 密钥对用户进行身份验证以访问服务器上的资源(例如 parseID.php,它采用 POST 参数来返回用户输入的 ID 上的 JSON 结果)。如果需要,用户也可以在脚本中使用此 API 密钥来访问 JSON 输出。
我的思考过程是:
已登录的用户单击按钮以生成 API 密钥。 脚本生成一个 API 密钥(使用 password_hash())并将其保存在数据库中的用户 ID 中 当用户想要访问受保护的资源时,他们将在 GET/POST 中提供给定的 API 密钥(或存储在会话中??),这将尝试将其与数据库中的密钥进行匹配并返回结果(授权与非授权)。 如果经过身份验证,用户就可以访问资源。我还将使用 SSL 来加密用户/资源之间的流量。
我有点不清楚,想知道这里可以采取哪些其他步骤/最佳做法来确保 API 密钥和用户信息的安全?
我在这里和谷歌上搜索的所有信息都是几年前的,并且使用诸如 MD5 之类的做法来加密密钥。
谢谢!
【问题讨论】:
【参考方案1】:这是正确的 - API 密钥已分配给用户,并且需要调用才能通过 API 以验证用户并检查他们可以做什么。
我建议的一些更改:
已登录的用户单击按钮以生成 API 密钥。
如果用户只能拥有一个 API 密钥,那么您和用户只需在创建帐户时生成 API 密钥并使其在他们的个人资料/设置区域中可用(即,使其成为一对一-one 关系而不是一对零或一)。您想要按需生成它的唯一原因是您必须给予明确的许可,例如通过一些适度的过程。
无论哪种方式,您都希望让用户重置 API 密钥(主要是在可能发生泄漏的情况下)。
顺便说一句,更常见的模式是支持多个 API 密钥。例如如果您查看 Twitter 的开发人员仪表板,用户可以创建 N 个“应用程序”,每个应用程序都会自动获取自己的 API 密钥。这种方法有一些优点,例如您可以收集应用程序周围的元数据,API 密钥被分区(更好的安全性),每个应用程序的权限模型可以不同,您可以撤销单个应用程序而不影响所有使用。不过,所有这些对你来说可能都是多余的。
存储在会话中??
Session 更像是一个与来回传递 cookie 相关的网络概念。你不需要那么复杂。只需在每个请求路径中都需要 API 密钥就应该很容易了。
当用户想要访问受保护的资源时
您可能还需要在每个请求中提供 API 密钥,而不仅仅是那些用于受保护资源的请求。无论如何,它对用户来说应该同样容易,并且它可以让您执行诸如速率限制和基于每个用户的日志请求之类的事情。
【讨论】:
我认为我在正确的轨道上 - 非常感谢您的建议。我会使用会话来表示 - 实际用户登录网站以编辑他们的个人资料等吗? 是的。会话非常适合基于浏览器的交互。以上是关于API 密钥 PHP / MYSQL 的功能的主要内容,如果未能解决你的问题,请参考以下文章