我正在将读取和写入方法放在我的数据库中并通过URL公开它们(我使用CodeIgniter框架并使用URL段将参数传递给这些方法)。最初的想法是让我的Ajax脚本调用这些方法。但是,现在我想我可能会将这些方法暴露给任何开发人员。
我应该怎么做以确保只有授权的开发人员才能使用我的API?我认为他们应该为每个方法调用传递API密钥和密码。如果我要向他们提供这样的细节,那么这是否足够安全?
另外,我认为我应该支持POST而不是GET,因为一些必需的参数可能不适合URL段。想法?
答案 0 :(得分:2)
首先:需要HTTPS 。
HTTPS确保在发送任何请求数据之前建立安全通道。是的,在发送任何请求数据之前:URL,标题,Cookie,GET或POST参数......任何内容。这意味着您可以使用简单的方法,例如通过HTTPS进行HTTP基本身份验证,而不会使用户的凭据面临风险。
除非您通过API传递的数据是真正公开的,否则这真的不可协商。如果您不使用HTTPS,则可以使用纯文本嗅探与API的任何通信(包括HTTP Basic凭据)。
主要网站(如Facebook)不使用HTTPS的唯一原因是因为它在大规模上变得昂贵。
如果您绝对无法运行HTTPS,那么您应该查看OAuth,它正是在这种情况下在API身份验证方面取得了长足进步。使用OAuth,您可以对用户进行身份验证,同时通过未加密的渠道保密凭据。
第二:身份验证不是授权。
不要盲目信任经过身份验证的API用户的数据。确保他们访问的方法和操作是合适的,否则您可能会为用户提供其他用户的数据或管理功能的后门。
除此之外还有很多其他内容,但如果你遵循这两个原则,你就会在路上。
答案 1 :(得分:2)
实施OAuth http://oauth.net/documentation/getting-started/适用于您尝试执行的操作。我不确定你要保护什么类型的数据,但我同意TradyBlix这可能是最好的。我之前已经实现了它,它并不难理解,很多文档记录了许多使用它来处理用户数据的API。
您应该考虑的另一件事是限制域名的API密钥,因此开发人员只能使用他们自己域中的API密钥 - 从根本上防止未经授权的开发人员获取访问权限,至少无法访问授权域和相应的键。
答案 2 :(得分:1)
也许你应该看看OAuth
。这是An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
我自己没有尝试过诚实,但这是我提到authorized developers use my API
时我想到的第一件事。只是一个想法。