Php 如何使用站点API对用户进行身份验证?

Php 如何使用站点API对用户进行身份验证?,php,api,oauth,Php,Api,Oauth,我想为用户构建一个API,以构建能够轻松与站点交互的应用程序,我想知道对用户进行身份验证的最佳方法是什么 看看其他API,很多API都让用户通过HTTPS连接发送用户名和密码作为GET参数。这是最好的方法吗?或者有其他的方法我应该考虑还是考虑?< /P> 我见过OAuth被抛来抛去,它看起来是一个很好的解决方案,但对于一个简单的API来说,它是不是太过了?您可以使用API密钥。根据请求生成绑定到帐户的唯一哈希。然后检查该密钥是否为有效密钥。只要API在使用其他人的密钥时没有任何重大安全问题,就不

我想为用户构建一个API,以构建能够轻松与站点交互的应用程序,我想知道对用户进行身份验证的最佳方法是什么

看看其他API,很多API都让用户通过HTTPS连接发送用户名和密码作为GET参数。这是最好的方法吗?或者有其他的方法我应该考虑还是考虑?< /P>
我见过OAuth被抛来抛去,它看起来是一个很好的解决方案,但对于一个简单的API来说,它是不是太过了?

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

这通常通过cookie实现

客户端通过POST请求向您的API发送用户名和密码。不要使用GET,这是不安全的。如果凭据是可接受的,则生成一个随机的、唯一的会话密钥,将其存储在您的一侧,并将其以cookie的形式发送回客户端

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


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

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

我不确定你在哪种情况下,但是:

如果用户是某种类型的商业客户,他们正在另一个网站中嵌入某种类型的小部件或代码,那么最好使用一个API密钥,该密钥的作用域与谷歌地图的作用域非常相似

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


要想把这些东西从盒子里拿出来,你可以用3scale之类的东西http://www.3scale.net 它会为你处理大部分事情免责声明,我在那里工作,所以请调整偏见!或者在PHP中的大多数语言中都有oAuth的开源库,Zend oAuth组件可以为您完成这项工作

目前的答案是否不令人满意?你问这个问题已经好几个月没有任何反馈了。