javascript - 我应该如何加密 API 访问的密码而不向客户端展示算法?
问题描述
我有一个 REST API (.net),初始登录需要加密密码(带有 OAEP 的 RSA)。原因是从本地日志中隐藏用户密码。
使用 javascript 执行此加密很复杂,我需要让客户端知道公钥。最终用户将能够对加密方法进行逆向工程,然后可以使用它来蛮力(或更糟)访问。那么为什么要麻烦,对(它是 SSL Secure)。
问题是,我仍然需要加密该密码。我是否应该在服务器端提供某种加密服务,为我提供在令牌端点抛出的密码?为什么不让服务为我登录然后返回令牌。我应该如何进行?
谢谢^_^
解决方案
这似乎是一个一般的身份验证问题。您可以像解决用户身份验证一样解决它。这样想:
当用户登录到您的应用程序时,他们会在客户端上提供他们的数据,然后在服务器上对其进行验证。为了让他们保持登录状态,他们通过 Cookie 会话、JWT 或其他方式获得某种令牌。然后将其保存在客户端上,并在每次请求时发送到服务器,以验证它们是否经过身份验证。
以上是网站如何显示“仅限注册用户”的内容。通过在每个新请求上验证先前给定的令牌。
现在,将此方法应用于您的 REST Api。用户需要请求一个令牌(它不应该是您的主密码,而是一个唯一生成的,在每个用户的基础上),然后在本地保存 X 时间。每次用户向 API 发出请求时,他们都会发送经过验证的令牌。
这也是普通 API 的做法。您将需要一个令牌或某种方式。如果您显示的确实是敏感信息,则令牌应不时更新(从几分钟到几天,具体取决于敏感程度)。您在服务器中保留有效令牌的记录。这样,如果任何令牌“被盗”,那么它只会在很短的时间内有效。
推荐阅读
- dolphindb - 该程序在 GUI 中执行,但网页端的作业未完成
- excel - 提取多个文本文件中两个字符之间的数据并重命名它们
- django - 如何使用 mod_wsgi 和 SSL 将 Http 协议定向到 Django 中的 Https 协议?
- sql - 如何使用 Lumen 计算 PostgreSQL 中的数据在字段中显示 count_apply
- python - Python Selenium:无法在亚马逊上找到元素
- flutter - Flutter 2 BottomNavigationBar 不显示第二项的标签
- azure - 如何使用 docker 映像将 netbox 部署到 azure app 服务?
- python - df_valid 的 IndexError
- android - RadioButton 外发光在开始时被切断
- javascript - 如何通过 PyQuery 选择具有部分类名的标签?