使用HTTP标头进行rest令牌认证

这是一个具有登录屏幕的现有系统,现在我将一些服务公开为REST服务。 我为这个Rest(jersey)服务构建了一个身份validation令牌登录系统。 用户发送用户名密码,然后服务器返回计算为的令牌;

sha1(username+password+currenttime(or any random number)) 

用户将使用此令牌登录应用程序以获取进一步的请求。 服务器使用时间戳和用户ID在数据库中保留令牌的副本,并在时间戳有效时登录该用户。

考虑使用HTTPS ,有几个问题;

我的设计中的一切看起来都不错吗? (哈希的生成以及我在数据库中保存的方式)在我看来最弱点是我需要在POST请求上发送普通的用户名和密码,但由于它是HTTPS,我想这不会有问题。

另一件事,对于第一个请求,因为它是一个现有的系统我没有在我的数据库中的用户密码,但保留他们的盐渍哈希版本。 我认为不能安全地给所有客户端这个盐渍算法发送给我一个密码的哈希值,所以我比较哈希值而不是密码。 这是否有意义=

1 / 2-我建议将用户名/密码张贴到服务器,然后服务器可以返回正文中的令牌。 对我来说最有意义的是:你实际上并没有在服务器上存储太多,所以PUT会出错,而查询参数根本就没有意义。 在请求中,标题应该有些一致,所以它们也没有意义。 当使用令牌进行实际通信时,请随意使用查询参数或标头。 没关系。

3-我会选择稍长的哈希算法(sha256?)

  1. 我通常会在HTTP标头中传递令牌。

  2. 无论你使用POST还是PUT都无所谓。

  3. 我建议帮助防止重放类型攻击的其他事情是在每个POST请求中包含一个nonce(不断增加的值)。 然后,服务器将跟踪上次使用的nonce并阻止使用先前使用的nonce的任何请求执行。