我正在开发需要身份验证的REST API。因为身份验证本身是通过HTTP上的外部Web服务进行的,所以我认为我们将分配令牌以避免重复调用身份验证服务。巧妙地使我想到了第一个问题:
这真的比仅要求客户端在每个请求上使用HTTP Basic Auth并在身份验证服务服务器端缓存调用更好吗?
Basic Auth解决方案的优点是,在可以开始对内容的请求之前,不需要完全往返服务器。令牌的范围可能会更灵活(即仅授予特定资源或操作的权限),但这似乎比我更简单的用例更适合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)
我的意图是仅允许来自已知方的呼叫,并防止逐字重复使用呼叫。
这样够好吗?杀人 过度杀伤力?
有了令牌,客户可以获取资源:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
对于最简单的呼叫,这似乎太冗长了。考虑到shared_secret
将遗留在(至少)iOS应用程序中的意愿(我认为可以从中提取它),这是否提供了错误的安全感之外的任何东西?