如何在不存储数据的情况下生成限时密钥或密码

时间:2011-04-03 00:41:49

标签: .net security authentication passwords otp

这是我的情景......

  1. 用户客户端应用程序向Web服务发出请求以进行访问。

  2. Webservice以“密钥”响应,该密钥仅在X秒/分钟内有效(时间可以变量或至少可以在我的网络服务中定义)

  3. 用户客户端应用程序立即使用密钥进行进一步请求。

  4. Web服务检查密钥是否仍然有效以及是否继续执行请求,否则会做出相应的响应。

  5. 我需要在没有将密钥存储在数据库中的情况下执行此操作,因此我猜测生成密钥(使用salt)时使用的哈希应该以某种方式基于时间。

    我想我真正想问的是这样做的最佳方法是什么。

    语言:VB.Net

3 个答案:

答案 0 :(得分:1)

你不会把钥匙存放在某个地方,哈希的本质是你不能得到它产生的信息。如果要获取信息,请改用加密算法。

答案 1 :(得分:0)

我们使用了第三方工具。它被称为Crypkey。 非常可配置但不便宜。

答案 2 :(得分:0)

最后,我们采取了以下措施....

本申请已知的盐 用户名 当前日期/时间+ 5秒

将上述内容按特定顺序组合为字符串,MD5将其哈希。

我们有一个特殊的URL,他们可以使用哈希作为查询字符串参数。

我们将哈希值与请求时生成的5个哈希值进行比较(一个用于当前秒,一个用于前一个4秒)。如果QS参数的散列与生成的这5个散列中的一个匹配,那么我们接受请求并执行相关操作。

我们的API上有一个方法,它返回一个已经应用了哈希的URL。然后,API客户端可以将其请求发送到立即提供的URL。检索到URL后超过5秒的任何请求都将被拒绝。

因此,我们有一个密钥,该密钥仅在生成之后的5秒内有效。

这使我们能够为用户提供从API客户端“自动登录”其网站的功能。客户端请求登录URL(随散列一起提供),然后立即将用户Web浏览器定向到该URL。 URL处理请求,检查哈希以及是否有效设置登录cookie并将其重定向到管理页面。

简单,有效,因为我们所有的API请求都是通过SSL安全的。