0

我正在尝试通过 Google Cloud CDN 让 hls / dash 流工作,以获得视频点播解决方案。文件/清单位于谷歌云存储桶中,一切看起来都配置正确,因为我遵循了文档https://cloud.google.com/cdn/docs/using-signed-cookies的每一步。

现在,我正在使用来自Google Cloud CDN 的等效 Node.js 代码,以存储桶作为后端签名 cookie,以创建一个具有正确签名密钥名称和值的签名 cookie,该名称和值是我之前在谷歌云中设置的。cookie 被发送到我在 Google Cloud 中的负载平衡器后端。

可悲的是,我总是收到 403 响应说<?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message></Error>

更多信息:

  • 在负载均衡器后端激活签名的 urls/cookies
  • cdn-account 存储桶中的 IAM 角色设置为“objectViewer”
  • 创建、保存并用于签署 cookie 的签名密钥

非常感谢您对此的任何帮助。

编辑: 我刚刚尝试了确切的 python 代码谷歌状态来从https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/cdn/snippets.py使用以下参数创建签名的 cookie:

称呼:sign_cookie('http://cdn.myurl.com/', 'mykeyname', 'mybase64encodedkey', 1614110180545)

密钥是直接从谷歌复制的,因为我在那里生成了它。

负载均衡器日志写入invalid_signed_cookie.

4

1 回答 1

0

我偶然发现了同样的问题。奇怪的是,它仅在网络浏览器中无法正常工作。我见过 GoolgeChrome 和 Safari 会返回 403,即使它们包含 cookie。但是,我注意到 curl 中具有完全相同 cookie 的相同请求返回 200。我认为这意味着它在 Web 浏览器中无法正常工作。我现在正在向 GCP 寻求支持,但我没有得到一个好的答案。 截屏

编辑:作为几个假设和测试的结果,我发现当我使用格式的 cookie 库并将值插入 Set-Cookie 标头时,会自动执行 URLEncoding 并发送 CloudCDN 无法理解的 cookie。因此,Web 浏览器现在可以通过将内容添加到 Set-Cookie 标头而不使用 URLEnconding 来检索内容。

于 2021-05-19T17:13:02.877 回答