API 设计模型 - 客户端加密

信息安全 加密 oauth
2021-09-07 08:11:47

我目前正在设计要使用的 API 模型。用户将拥有一个“secret_api_key”和一个“public_api_key”。他们将使用公钥、表单数据和哈希向我的服务器发送请求。哈希是使用“secret_api_key”加密的表单数据。

这样服务器将重新创建此哈希,因为它知道“secret_api_key”,如果哈希相同,则接受请求,否则拒绝它。

我的问题是,如果有人要使用 JavaScript 执行此操作,那么他们将不得不在浏览器中“随时随地”加密这个,这意味着他们将需要“secret_api_key”来对它进行哈希处理。但是“secret_api_key”是为了远离公众视线,所以任何人都可以查看脚本并看到密钥。

这是一种错误的做法吗?老实说,我想不出一种方法可以让您使用 JavaScript 在浏览器中使用我的 API(这将是人们使用我的 API 的主要方法)

我知道使用 OAuth 您会得到一个“access_token”,您只需将其与请求一起发送,肯定有人可以使用流量嗅探器并使用相同的访问令牌重新发送请求吗?还是 OAuth 的工作方式不同?

任何帮助或建议将不胜感激。

谢谢你。

1个回答

您将需要一个会话级密钥,该密钥可以提供给不受信任的 javascript。基本上,运行 API 的站点需要能够从每个用户的 API 密钥请求单独的会话,然后用户的会话必须使用该密钥。这允许在您和托管内容的服务器之间保持信任,同时还允许用户根据服务器的密钥执行操作而不会泄露它。