javascript - 我应该如何加密 API 访问的密码而不向客户端展示算法?

标签 javascript reactjs public-key-encryption

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

使用 JavaScript 执行加密很复杂,我需要让客户端知道公钥。最终用户将能够对加密方法进行逆向工程,然后使用它进行暴力(或更糟)访问。那么为什么还要麻烦呢,对吧(这是 SSL 安全)。

事实是,我仍然需要对该密码进行加密。我是否应该在服务器端提供某种加密服务来为我提供在 token 端点处抛出的密码?为什么不让服务帮我登录然后返回 token 。我应该如何进行?

谢谢^_^

最佳答案

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

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

以上是网站如何显示“仅限注册用户”内容的方法。通过在每个新请求上验证先前给定的 token 。

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

这也是普通 API 的做法。不管怎样,你都需要一个 token 或某种 token 。如果您显示的确实是敏感信息,则 token 应该不时更新(从几分钟到几天,具体取决于敏感程度)。您在服务器中保留有效 token 的记录。这样,如果任何 token 被“窃取”,那么它只会在很短的时间内有效。

关于javascript - 我应该如何加密 API 访问的密码而不向客户端展示算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595346/

相关文章:

php - <Select>从容器继承javascript onclick并隐藏选项

Javascript 6to5(现在是 Babel)导出模块的使用

javascript - 在 React 中更新数组索引的状态

javascript - setState 在 axios fetch 中不起作用

java - java中使用rsa时出现解密错误。

c# - 如何验证签名,从 PEM 文件加载公钥?

javascript - JQuery 迭代多个元素并删除每个元素的第一个子项

javascript - JS/React 的类似 ViewDidAppear 的方法?

使用私有(private)指数和模数以 64 位 block 形式解密 RSA 加密文件的 Python 代码

javascript - 是否可以通过 JavaScript 在文本区域中禁用拼写检查?