我认为使用用户的密码哈希作为生成 hmac 的秘密会很舒服。为什么 OAuth 和其他人使用令牌和随机数?
我想到了这样的事情:
客户端在 ui 中输入密码。应用程序使用存储在服务器上的密码的哈希值向 Web 服务注册。现在该散列上的表单不再被传输。客户端始终可以通过要求用户输入密码并对其进行哈希处理来重新生成密钥。每条消息都使用此哈希签名,服务器可以通过用户名或 guid 查找它并检查发送的 mac 是否有效。
服务器上的入侵者可以获得该哈希,但不知道用户的真实密码,无论如何他可以使用该哈希发送有效请求。但这不太可能发生,保存的哈希值也可以使用随机数再次进行哈希处理。无论如何,因为 pwd 文件将在客户端的服务器上,所以应该使用例如 base64 进行混淆,以避免文件看起来像 {"password":"a4bd146hashhashhash"}。
最重要的是,用户的真实密码永远不会被传输。请求将使用时间戳/令牌来保护以防止重放(我在这里认识到令牌的用途)。
发送哈希对我来说非常适用,因为客户端永远不会是一个带有标签的简单网站,例如。该网络服务将用于基于 ajax 的应用程序和 Java 桌面应用程序,它们都能够散列字符串......
那有什么问题?它是如此简单,比任何与身份验证相关的东西都更加 RESTFul,而且我认为还有效。我错过了什么?
问候,克鲁梅尔