在没有HTTPS的情况下安全地对服务器进行身份验证(没有发送密码)的挑战/响应方法是什么?

时间:2015-04-17 00:57:12

标签: javascript security authentication

在没有HTTPS的情况下安全地对服务器进行身份验证(没有发送密码)的挑战/响应方法是什么?

我有一个应用程序(Javascript客户端)通过CORS(身份验证)连接到我们的后端,后端依次返回包含非HTTPS的声明(JWT)的令牌。 REST是无状态的,所以我们做基于令牌的,根本没有会话。

当客户端获得该令牌(包含声明)时,它会被添加到客户端的每个请求的标头中,因此后端知道哪个用户ID正在执行该请求并执行相应的操作。到目前为止,这对我们有用。我关注的是身份验证过程以及每个请求的安全性。

要验证客户端是否发送了电子邮件和散列密码对,但我想知道即使不使用HTTPS也有更安全的方法。我读过但不发送密码但是做一个挑战/回应,但这个想法的实施是什么?

最后一个问题是,即使我们安全地解决了身份验证过程,每个包含声明令牌的请求如何才能得到保护?

2 个答案:

答案 0 :(得分:0)

没有HTTPS,无法安全地执行此操作。为了让您的服务器对用户进行身份验证,您需要某种令牌(cookie,添加到您拥有的请求等)。但问题是,如果没有https,窃听者可以将javascript添加到您的页面。然后,他们可以捕获令牌并自己使用它(窃取所有用户的数据),或者修改它。如果您希望您的产品以任何方式安全,您需要HTTPS。

编辑:我想您可以存储有关发送请求的设备(用户代理等)的一些信息,并且只允许在该设备上使用该令牌。但是,攻击者可能会在重用令牌时伪造用户代理,因此这不会太难以绕过。

答案 1 :(得分:-1)

挑战响应是一种以非明确方式发送密码的机制。

1°/客户端和服务器必须共享一个加密密钥:最好是在客户端手动添加证书,但可能有点重。另一个解决方案是将密钥只存储一次到localStorage。

2°/客户端向服务器请求质询:这是服务器生成的“短语”

3°/ client使用此“密码”汇总其密码,密码并将响应发送到服务器:Challenge =>响应

4°/服务器解密消息,搜索并删除其密码以获取密码。