3

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

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

用户将使用此令牌登录应用程序以获取更多请求。服务器在数据库中保存一个带有时间戳和用户 ID 的令牌副本,如果时间戳有效,则登录该用户。

考虑到会用到HTTPS ,有几个问题;

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

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

4

2 回答 2

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

  2. 无论您使用 POST 还是 PUT 都无关紧要。

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

于 2012-12-26T13:57:48.737 回答
1

1/2-我建议将用户名/密码发布到服务器,然后服务器可以在正文中返回令牌。对我来说最有意义:您实际上并没有在服务器上存储太多,所以 PUT 是错误的,并且查询参数根本没有意义。标头应该在请求之间保持一致,因此它们也没有意义。实际使用令牌进行通信时,请随意使用查询参数或标头。真的没关系。

3-我会选择一个稍长的散列算法(sha256?)

于 2012-12-26T13:58:22.527 回答