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

发布于 2024-10-30 02:35:43 字数 358 浏览 1 评论 0原文

这是我的场景...

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

  2. Web 服务使用仅在 X 秒/分钟内有效的“密钥”进行响应(时间可以是可变的,或者至少可以在我的 Web 服务中定义)

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

  4. Web 服务检查密钥是否仍然有效,如果它继续请求,否则相应地响应。

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

我想我真正要问的是做到这一点的最佳方法是什么。

语言:VB.Net

Here is my scenario...

  1. Users client application makes a request to a web service for access.

  2. Webservice responds with a "key" that is only valid for X seconds/minutes (time could be variable or at least definable in my web service)

  3. Users client application uses the key immediately to make a further request.

  4. Web service checks that the key is still valid and if it is proceeds with the request, otherwise responds accordingly.

I need to do this without actually storing the key in the database so I'm guessing that the hash used in generating the key (with a salt) should be based on time somehow.

I guess what I'm really asking is what is the best approach to do this.

Language: VB.Net

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

芸娘子的小脾气 2024-11-06 02:35:43

您无法将密钥存储在某个地方,哈希的本质是您无法获取生成它的信息。如果您想取回信息,请改用加密算法。

You won't get around storing the key somewhere, the nature of a hash is that you can't get the information it was generated out of. If you want to get the information back, use an encryption algorithm instead.

九局 2024-11-06 02:35:43

我们为此使用了第三方工具。这就是所谓的“密码钥匙”。
非常可配置,但并不便宜。

we used a 3rd party tool for that. It's called Crypkey.
Very configurable but not cheap.

扶醉桌前 2024-11-06 02:35:43

最后我们选择了以下内容......

应用程序已知的盐
用户的用户名
当前日期/时间 + 5 秒

将以上内容按特定顺序组合为字符串,并对其进行 MD5 哈希处理。

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

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

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

所以我们有一个密钥,从生成之日起仅在 5 秒内有效。

这使我们能够为用户提供从 API 客户端“自动登录”其网站的能力。客户端请求登录 URL(带有哈希值),然后立即将用户的 Web 浏览器定向到该 URL。 URL 处理请求,检查哈希值,如果有效,则设置登录 cookie 并将其重定向到其管理页面。

简单、有效,而且由于我们所有的 API 请求都通过 SSL 进行,因此安全。

In the end we went with the following....

A salt known to the application
The users username
The current date/time + 5 seconds

combine the above in a specific order as a string and MD5 hash it.

We have a special URL that they can hit with the hash as a query string parameter.

We compare the hash to 5 hashes generated at the time of the request (one for the current second and one for each of the previous 4 seconds). If the hash on the QS parameter matches one of these 5 hashes generated then we accept the request and perform the relevant actions.

We have a method on our API that returns a URL with the hash already applied. API Clients can then send their request to the URL provided immediately. Any requests made more than 5 seconds after the URL was retrieved are rejected.

So we have a key that is only valid for 5 seconds from the time it was generated.

This allows us to provide users the ability to "auto-login" their site from an API client. The client requests the login url (which comes with the hash) and then immediately direct the users web browser to that URL. The URL handles the request, checking the hash and if valid setting a login cookie and redirecting them to their admin page.

Simple, effective and, since all our API requests are over SSL, secure.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文