没有SSL和HMAC的REST(ful)简单身份验证?

时间:2012-09-18 20:05:13

标签: rest authentication hash

我想知道是否可以使用一种简单的身份验证方法,这种方法既安静又快速,并且提供了一种安全保障。

SSL不是一个选项,因为我不能依赖客户端服务器上的有效SSL证书。另外HMAC实际上是不可能的,因为在正确使用时,请求的正文应该被签名,但在我的情况下,正文可能是一个大文件。此外,如果使用JavaScript / AJAX可以进行身份​​验证。

我想到了一些非常简单的事情。那个问题是什么:

HEADER:X-Authentication:timestamp:username:sha256(timestamp:password)

服务器知道用户密码并且可以检查散列,时间戳用于仅允许发生的请求,例如10秒前重播窗口非常小,服务器端没有会话。

如果哈希被破解,攻击者就会知道密码并且可以无限制地访问。

替代方案是使用

HEADER:X-Authentication:时间戳:用户名:HMAC(密码,'timestamp + request-method + verb')

要走的路是什么?我不是安全专家,也许在服务器上存储会话会更好(但不是RESTful)?

2 个答案:

答案 0 :(得分:3)

我构建了一个随机哈希算法,可以满足您的需要,它被称为jAuthenticate。

您可以从以下网址下载:https://github.com/thomasoeser/jAuthenticate

您可以在此处查看其工作原理:http://furiousgryphon.com/jauthenticatedemo.html

它是一个强大的算法(在我看来)的原因是我使用随机数来影响哈希,但是我发送了带有哈希值的模糊数字。

每个哈希仅供一次使用。

看看,它是免费的开源(MIT)。

答案 1 :(得分:1)

HTTP身份验证是可扩展的,因此您可以创建自己的机制(显然需要您自担风险!)。有关详细信息,请参阅http://tools.ietf.org/html/draft-ietf-httpbis-p7-auth-20

不要费心发明自己的新X-header。在您的方案中使用现有的Authorization标头是一个更好的选择。 例如

Authorization: kruemel-auth timestamp:HMAC(password, 'timestamp+request-method+verb')

理想情况下,新的方案将在IANA注册并附带规范。正在设置注册表以跟踪已开发的身份验证方案。见http://tools.ietf.org/id/draft-ietf-httpbis-authscheme-registrations-03.html