按照增加安全性/复杂性的顺序:
基本 HTTP 身份验证
许多 API 库将允许您构建它(例如 Django 中的 Piston),或者您也可以让您的网络服务器处理它。 Nginx 和 Apache 都可以使用服务器指令通过简单的 b64 编码密码来保护站点。它不是世界上最安全的东西,但它至少是一个用户名和密码!
如果您使用 Nginx,您可以在主机配置中添加一个部分,如下所示:
auth_basic "Restricted";
auth_basic_user_file /path/to/htpasswd;
(将其放入您的location /
block)
Docs: http://wiki.nginx.org/HttpAuthBasicModule http://wiki.nginx.org/HttpAuthBasicModule
您需要获取 python 脚本来生成该密码并将输出放入文件中:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py?format=txt http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py?format=txt
文件的位置并不重要,只要 Nginx 可以访问它即可。
HTTPS
保护从服务器到应用程序的连接,这是最基本的,可以防止中间人攻击。
你可以使用 Nginx 来做到这一点,它的文档非常全面:http://wiki.nginx.org/HttpSslModule http://wiki.nginx.org/HttpSslModule
一个自签名证书就可以了(而且免费!)。
API Keys
这些可以是您喜欢的任何格式,但它们可以让您在需要时撤销访问权限。如果您正在开发连接的两端,这可能不是您的完美解决方案。当您有第三方使用 API(例如 Github)时,通常会使用它们。
OAuth
OAuth 2.0 是这里的最佳选择。虽然我不知道该规范的基本工作原理,但它是现在大多数身份验证(Twitter、Facebook、Google 等)的事实上的标准,并且有大量的库和文档可以帮助您实现这些功能。话虽这么说,它通常用于通过请求第三方服务进行身份验证来对用户进行身份验证。
鉴于您在两端进行开发,将您的 API 置于基本 HTTP Auth 后面并通过 HTTPS 提供服务可能就足够了,特别是如果您不想浪费时间搞 OAuth。