1

我想为用户构建一个 API 来构建可以轻松与站点交互的应用程序,我想知道验证用户的最佳方式是什么。

看看其他 API,其中很多是让用户通过 HTTPS 连接将用户名和密码作为 GET 参数发送。这是最好的方法吗?还是我应该研究或考虑其他方法?

我已经看到 OAuth 被抛来抛去,它看起来是一个很好的解决方案,但仅仅对于一个简单的 API 来说是不是有点矫枉过正?

4

3 回答 3

0

GET 中的用户名/密码不是一个很好的方法,因为即使 API 的功能比登录站点更有限,您也可能会暴露整个用户帐户以进行劫持。因此,最好将网站登录和 API 访问之间的关注点分开。

我不确定您属于哪种情况,但是:

  • 如果用户是某种商业客户,他们在另一个网站中嵌入了某种类型的小部件或代码,那么最好使用范围为引用域的 API 密钥(就像谷歌地图一样)。

  • 如果他们是对 API 一无所知但将使用第三方构建的应用程序的最终用户,那么 oAuth 可能是您最好的选择,否则您的用户可能实际上会将他们的用户名/密码提供给未知的第三方派对。它更复杂,但从长远来看可能是值得的。

要开箱即用这些东西,您可以使用 3scale (http://www.3scale.net) 之类的东西,它会为您处理大部分内容(免责声明,我在那里工作,所以调整偏见!)或者在大多数语言中都有用于 oAuth 的开源库(在 PHP Zend-OAuth 组件中可能会为您完成这项工作)。

于 2012-05-31T14:20:29.897 回答
0

您可以使用 API 密钥。根据请求生成与帐户绑定的唯一哈希。然后检查该密钥是否为有效密钥。只要 API 对使用他人密钥的人没有任何重大安全问题,则不需要授权。如果有人使用其他人的密钥出现问题,那么身份验证将是合理的。

于 2012-05-30T16:49:47.020 回答
0

这通常是通过 cookie 实现的。

客户端通过POST请求将其用户名和密码发送到您的 API(不要使用GET,这是不安全的)。如果凭证是可接受的,则生成一个随机的、唯一的会话密钥,将其存储在您身边,并以 ​​cookie 的形式将其发送回客户端(请参阅 参考资料setcookie())。

当客户端现在发出进一步的请求时,它们会随请求发送会话密钥 cookie。检查$_COOKIE会话密钥是否与您存储的密钥匹配;如果是,则表示用户已通过身份验证。

请注意,这个最小示例很容易受到试图猜测有效会话密钥的暴力攻击。您需要记录客户端在其 cookie 中发送的无效密钥,并在一段时间内阻止其 IP 地址以防止这种情况发生。

于 2012-05-30T17:26:46.743 回答