我想知道是否可以使用一种简单的身份验证方法,这种方法既安静又快速,并且提供了一种安全保障。
SSL不是一个选项,因为我不能依赖客户端服务器上的有效SSL证书。另外HMAC实际上是不可能的,因为在正确使用时,请求的正文应该被签名,但在我的情况下,正文可能是一个大文件。此外,如果使用JavaScript / AJAX可以进行身份验证。
我想到了一些非常简单的事情。那个问题是什么:
HEADER:X-Authentication:timestamp:username:sha256(timestamp:password)
服务器知道用户密码并且可以检查散列,时间戳用于仅允许发生的请求,例如10秒前重播窗口非常小,服务器端没有会话。
如果哈希被破解,攻击者就会知道密码并且可以无限制地访问。
替代方案是使用
HEADER:X-Authentication:时间戳:用户名:HMAC(密码,'timestamp + request-method + verb')
要走的路是什么?我不是安全专家,也许在服务器上存储会话会更好(但不是RESTful)?
答案 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