YouTube API V3 - HTTP 引用限制
YouTube API V3 - HTTP referrer restriction
我正在为我的应用程序使用 YouTube V3 API,现在我似乎遗漏了一些东西,因为我将密钥限制在我列出的网站上。当密钥完全不受限制时,该应用程序可以运行,但我不希望每个人和他们的妈妈都在他们的网站上使用我的密钥(我的代码在 GitHub - 这是一个普通的 JavaScript 应用程序所以我无法隐藏我的密钥)。这是我的提取调用...
fetch(baseURL)
.then(response => response.json())
.then(responseJson => displayYoutubeResults(responseJson))
.catch(err => alert("YouTube's API is acting up again. Site Administrator is dealing with it.", err));
baseURL 只是进行 fetch 调用的 URL。既然我对密钥有限制,是否需要某种类型的 Header?
如果您的应用产生如下 JSON 错误响应:
{
"error": {
"code": 403,
"message": "Requests from referer \u003cempty\u003e are blocked.",
"errors": [
{
"message": "Requests from referer \u003cempty\u003e are blocked.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
那么这意味着,实际上,您必须将调用 HTTP Referrer
header 的 API 端点传递为:
fetch(baseURL, {
referrer: "REFERRER"
})
其中 REFERRER
将被替换为与您在 Google 的开发人员控制台上选择复选框 HTTP Referrers (web sites)
时输入的 URL 模式匹配的值在 Application restrictions
部分下,并在 Website restrictions
.
小节下添加一个或多个 URL 模式项
尽管如此,请记住,对您的 API 密钥使用这种应用程序限制并不能保护您免受(引述)每个人和他们的妈妈在他们的网站上使用您的密钥.是这样的,因为您说您的应用程序的源代码是 public(这意味着每个人都可以从源代码本身轻松读取有效的 HTTP 引荐来源网址)。
如果您将 API 关键 HTTP 引用限制(正如我上面提到的)设置为您网站的 URL(例如 http://www.foobar.com
),则使用 referrerPolicy
为:
fetch(baseURL, {
referrerPolicy: "origin"
})
您将避免在源代码本身中指定 URL http://www.foobar.com
。
但是,referrerPolicy
选项也不完全安全,因为感兴趣的 third-party 如果有关于您的应用程序的额外信息,仍然可以推导出您的 URL。
我正在为我的应用程序使用 YouTube V3 API,现在我似乎遗漏了一些东西,因为我将密钥限制在我列出的网站上。当密钥完全不受限制时,该应用程序可以运行,但我不希望每个人和他们的妈妈都在他们的网站上使用我的密钥(我的代码在 GitHub - 这是一个普通的 JavaScript 应用程序所以我无法隐藏我的密钥)。这是我的提取调用...
fetch(baseURL)
.then(response => response.json())
.then(responseJson => displayYoutubeResults(responseJson))
.catch(err => alert("YouTube's API is acting up again. Site Administrator is dealing with it.", err));
baseURL 只是进行 fetch 调用的 URL。既然我对密钥有限制,是否需要某种类型的 Header?
如果您的应用产生如下 JSON 错误响应:
{
"error": {
"code": 403,
"message": "Requests from referer \u003cempty\u003e are blocked.",
"errors": [
{
"message": "Requests from referer \u003cempty\u003e are blocked.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
那么这意味着,实际上,您必须将调用 HTTP Referrer
header 的 API 端点传递为:
fetch(baseURL, {
referrer: "REFERRER"
})
其中 REFERRER
将被替换为与您在 Google 的开发人员控制台上选择复选框 HTTP Referrers (web sites)
时输入的 URL 模式匹配的值在 Application restrictions
部分下,并在 Website restrictions
.
尽管如此,请记住,对您的 API 密钥使用这种应用程序限制并不能保护您免受(引述)每个人和他们的妈妈在他们的网站上使用您的密钥.是这样的,因为您说您的应用程序的源代码是 public(这意味着每个人都可以从源代码本身轻松读取有效的 HTTP 引荐来源网址)。
如果您将 API 关键 HTTP 引用限制(正如我上面提到的)设置为您网站的 URL(例如 http://www.foobar.com
),则使用 referrerPolicy
为:
fetch(baseURL, {
referrerPolicy: "origin"
})
您将避免在源代码本身中指定 URL http://www.foobar.com
。
但是,referrerPolicy
选项也不完全安全,因为感兴趣的 third-party 如果有关于您的应用程序的额外信息,仍然可以推导出您的 URL。