我面临的挑战是实现一个供相对非技术性客户使用的 API——将一些示例代码粘贴到他们的 WordPress 或自主开发的 PHP 网站中可能就是我们能要求的极限了。要求他们在服务器上安装 SSL 是不可能的。所以我正在寻找一种简单而安全的方法来验证 API 客户端。
OAuth 是显而易见的解决方案,但我认为它没有通过“简单”测试。
将客户端 ID 和散列密钥作为参数添加到请求中更接近 - 这并不难做到md5($secret . $client_id)
,无论 php 是什么。
在我看来,如果客户端请求可以使用与 SSH 公钥相同的方法(客户端从他们的服务器向我们提供密钥,那么应该有一些现有的魔法可以使所有后续事务像常规 HTTP API 请求一样透明地工作。
我仍在解决这个问题(显然:-),所以如果我是个白痴,那么知道为什么就好了。
谢谢!
答案1
如果您托管该服务,则可以在您这边设置 SSL。有多种选项可用于验证客户端。
- 您可以使用像问题中所说的那样的令牌。
- 您可以使用 http 身份验证,并让他们指定用户名和密码。
- 您可以像 Mircea 所说的那样使用客户端 SSL 证书。
- 您可以根据连接的 IP 地址来确定。
答案2
与 SSH 公钥类似的东西是 SSL 客户端证书认证,又称双向 SSL。
答案3
这是一个相当大的话题,你的 API 是纯粹基于 Web 的吗?为什么 SSL 太难了?如果你想要与自动化客户端进行可信通信并保证不可否认性,你将需要 SSL。如果你的 API 是从用户会话访问的,你可以实施双因素身份验证吗?使用类似 RSA 令牌的东西,或者如果他们有智能手机,甚至可以使用谷歌身份验证器。
答案4
我认为你可以使用 Diffie Hellman 根据公钥/私钥对创建共享密钥。我使用过类似的方法;我认为如果你试图从多个来源控制对 API 的授权,这种方法会很有效。