最佳答案
我正在开发一个需要身份验证的 REST API。由于身份验证本身是通过 HTTP 上的外部 Web 服务进行的,因此我推断我们将分发令牌以避免重复调用身份验证服务。这就引出了我的第一个问题:
这真的比仅仅要求客户机在每个请求上使用 HTTPBasicAuth 并缓存对身份验证服务服务器端的调用更好吗?
BasicAuth 解决方案的优点在于,在开始内容请求之前,不需要完全往返于服务器。令牌可能在范围上更加灵活(即只授予特定资源或操作的权限) ,但是这似乎比我的简单用例更适合于 OAuth 上下文。
目前的令牌是这样获得的:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
所有请求都需要 api_key
、 timestamp
和 verifier
。“验证器”由以下人员返回:
sha1(timestamp + api_key + shared_secret)
My intention is to only allow calls from known parties, and to prevent calls from being reused verbatim.
这样够了吗? 过度杀戮? 过度杀戮?
有了令牌,客户端就可以获取资源:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
For the simplest call possible, this seems kind of horribly verbose. Considering the shared_secret
will wind up being embedded in (at minimum) an iOS application, from which I would assume it can be extracted, is this even offering anything beyond a false sense of security?