保护用于进行 Web Api 调用的 API 密钥
Posted
技术标签:
【中文标题】保护用于进行 Web Api 调用的 API 密钥【英文标题】:Securing API key used to make Web Api call 【发布时间】:2018-08-30 21:57:56 【问题描述】:我正在做一个 Jquery Ajax web api 调用。该 Api 调用要求我传递 Api 密钥。我已启用 CORS。这是我的通话目前的样子
$.ajax(
type: "POST",
url: http://localhost:83/test/example1,
data: name: JSON.stringify(myObject), userId: UserId ,
dataType: "json",
headers:
'apikey': 'asdfee'
);
我的问题是如何安全地传递此密钥?我不想直接暴露价值。 请问有什么方向吗?
【问题讨论】:
没有正确的解决方案。任何可能的存储密钥的方式都可以被浏览器读取 = 任何可以访问您浏览器的人都可以读取 我如何安全地传递此密钥您可以使用 SSL 安全地传递密钥,但这只会保护通信。没有办法将该密钥安全地存储在您的代码中,因为它对每个人都是公开可见的。为了保护这样的密钥,通常使用OAuth 的一些风格,尽管这不再是标准化的。基本上这不是安全(句号) 如果您担心这一点,您应该使用 AJAX 发布到服务器上的控制器,然后您的服务器可以安全地发布到需要 API 密钥的 API。 【参考方案1】:简而言之,您无法在客户端保护密钥。客户端的任何内容都是公开的,任何人都可以查看。
话虽如此,您可以尝试一些方法。
尽量让任何试图获取您的密钥的人都难以接受。这意味着存储在本地存储中并缩小您的 javascript 代码。这不是 100%,但它会让任何想要获得它的人的生活更加艰难。
在两者之间引入另一层。我自己也做过类似的事情,这个额外的层是另一个 API。这是您存储密钥的地方,也是您与其他 API 通信的地方。所以基本上你永远不会向客户端公开 API 密钥。您的前端调用这个新 API,而新 API 调用受保护的 API。正如我所说,中间多了一层,但它确实有助于保证密钥的安全。
【讨论】:
同时使用选项 1 和 2以上是关于保护用于进行 Web Api 调用的 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章
在 Vanilla JS 和 Django 中保护 API 密钥的最佳方法