我应该如何在不向客户端炫耀算法的情况下为 API 访问加密密码?

How should I encrypt passwords for API access without showing off the algorithm to the client?

我有一个 REST API (.net),初始登录需要加密密码(RSA with OAEP)。原因是为了隐藏本地日志中的用户密码。

使用 javascript 执行此加密很复杂,我需要让客户知道 public 密钥。最终用户将能够对加密方法进行逆向工程,然后可以将其用于暴力(或更糟)访问。那么何必呢,对吧(它是 SSL Secure)。

问题是,我仍然需要加密该密码。我是否应该在服务器端提供某种加密服务,为我提供密码以扔到令牌端点?为什么不让服务只为我登录然后 return 令牌。我该如何进行?

谢谢^_^

这似乎是一个一般的身份验证问题。您可以像解决用户身份验证一样解决它。这样想:

当用户登录到您的应用程序时,他们会在客户端提供数据,然后在服务器上进行验证。为了让他们保持登录状态,他们会通过 Cookie 会话、JWT 或其他方式获得某种令牌。然后将其保存在客户端上并在每次请求时发送到服务器以验证它们是否已通过身份验证。

以上是网站如何显示 "registered users only" 内容。通过在每个新请求上验证先前给定的令牌。

现在,将此方法应用于您的 REST Api。用户需要请求一个令牌(不应该 是你的主密码,而是一个唯一生成的,在每个用户的基础上),然后在本地保存 X 时间.每次用户向 API 发出请求时,他们都会发送经过验证的令牌。

这也是 API 正常人的做法。您将需要一个令牌或某种方式。如果您显示的确实是敏感信息,则令牌应该不时更新(从几分钟到几天,具体取决于敏感程度)。您在服务器中保留有效令牌的记录。这样,如果任何令牌是 "stolen",那么它只会在一小段时间内有效。