使用HTTP标头进行休息令牌认证

时间:2012-12-26 13:49:04

标签: java rest authentication token

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

的令牌
sha1(username+password+currenttime(or any random number))

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

  3. 我建议帮助防止重播类型攻击的其他内容包括每个POST请求的随机数(不断增加的值)。然后,服务器将跟踪上次使用的nonce并阻止使用以前使用过的nonce的任何请求执行。

答案 1 :(得分:1)

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

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