【发布时间】:2018-09-16 11:48:09
【问题描述】:
我正在尝试在 Google AMP 缓存中更新我的 Google AMP 页面,但收到 URL 签名验证错误。
我的代码:
Dim tStamp As String = GetUnixTimeStampFromDateTime(DateTime.Now).ToString
Dim ampBaseUrl As String = "https://www-example-com.cdn.ampproject.org"
Dim signatureUrl As String = "/update-cache/c/s/www.example.com/articles/278/myarticle/amp?amp_action=flush&_ts=" + tStamp
Dim rsa As RSA = certificate.GetRSAPrivateKey()
Dim data() As Byte = System.Text.Encoding.Unicode.GetBytes(signatureUrl)
Dim sig() As Byte = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)
Dim AMPURLSignature As String = EncodeTo64(sig.ToString)
编码函数:
Public Shared Function EncodeTo64(ByVal toEncode As String) As String
Dim toEncodeAsBytes As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode)
Dim returnValue As String = System.Convert.ToBase64String(toEncodeAsBytes)
Return returnValue
End Function
我尝试使用 this URL 调用 Google AMP 缓存。
现在,我收到 403 错误:
您的客户无权获取网址 /update-cache/c/s/www.example.com/articles/278/myarticle/amp?amp_action=flush&_ts=1523016476&_url_signature=U2lzdGVtLkJ5dGVbdQ。 URL 签名验证错误。这就是我们所知道的。
我发现谷歌示例代码不够清晰:https://developers.google.com/amp/cache/update-cache
我的问题是关于签名 URL:
- 我是使用文章 AMP URL 还是常规 URL?
- 是否需要在我的签名 URL 中包含查询字符串参数
amp_action和amp_ts?还是在我签署 URL 之后再附加这些? - 我应该将上面的
ampBaseUrl添加到我的signatureUrl变量之前,还是不需要这样做?
更新 1
根据@CodeFuller 的建议,我检查了网址并收到了Verified OK 消息。我还处理了第 2 步:
- APIkeys 匹配:https://www.toptrouwen.nl/.well-known/amphtml/apikey.pub 匹配 https://www-toptrouwen-nl.cdn.ampproject.org/r/s/www.toptrouwen.nl/.well-known/amphtml/apikey.pub
- 从我的服务器提供 apikey.pub 作为文本/纯文本
- 通过 https 公开提供 apikey.pub
- 在机器人中添加了不允许:用户代理:* 禁止:/.well-known/amphtml/apikey.pub
更新 2
是的,使用新代码,我还会在验证时获得Verified OK。
生成此网址:
https://www-toptrouwen-nl.cdn.ampproject.org/update-cache/c/s/www.toptrouwen.nl/artikelen/132/het-uitwisselen-van-de-trouwringen-hoe-voorkom-je-bloopers/amp?amp_action=flush&_ts=1523138180&_url_signature=tKPO3k624ybwxoEynqN8oI3/UDxhq1TF8jX9aKeVyL0IWLUODXuMB7ansP0t1+/5Lm2V7RYZbUWxt2Whh7+LFEmfQFGJJE/iPtoBVsqrdb5356QwiIrDHOzY+3z5dASZxYlAwlfzUFdonGyDsh/UlCjjvvNahFEWzHOpB5JQxJQ1Wn0kGLQUF1v2u47abbae6cNQBm3YB/0Z1FLfTJLM1oOEOSDh9vQH1SqO/6SoYtUhSQjSrYdl/g5O0QJ7A9pKUxOPfgVJM0l8Sgb66cVeWWoWq0WIFe24RPXUMl9tIFFZ1TY2R+ZpIMvpEAPDjCsdGPo7KTWqGb4qfoTBINJmtQ==
然后我收到错误 Required query parameter 'amp_url_signature' missing.(与之前的问题有关,amp_ 参数被搞砸了。
然后我将 URL 参数重命名为正确的名称:https://www-toptrouwen-nl.cdn.ampproject.org/update-cache/c/s/www.toptrouwen.nl/artikelen/132/het-uitwisselen-van-de-trouwringen-hoe-voorkom-je-bloopers/amp?amp_action=flush&amp_ts=1523138180&amp_url_signature=tKPO3k624ybwxoEynqN8oI3/UDxhq1TF8jX9aKeVyL0IWLUODXuMB7ansP0t1+/5Lm2V7RYZbUWxt2Whh7+LFEmfQFGJJE/iPtoBVsqrdb5356QwiIrDHOzY+3z5dASZxYlAwlfzUFdonGyDsh/UlCjjvvNahFEWzHOpB5JQxJQ1Wn0kGLQUF1v2u47abbae6cNQBm3YB/0Z1FLfTJLM1oOEOSDh9vQH1SqO/6SoYtUhSQjSrYdl/g5O0QJ7A9pKUxOPfgVJM0l8Sgb66cVeWWoWq0WIFe24RPXUMl9tIFFZ1TY2R+ZpIMvpEAPDjCsdGPo7KTWqGb4qfoTBINJmtQ==
然后我得到:404 Failed to decode amp_url_signature,我认为这是因为 URL 中有 + 和 \ 字符。当我删除它们时,我再次收到错误URL signature verification error。
我认为 UTC 时间戳目前不是问题,因为我之前已经看到如果时间戳不正确,Google 会抛出错误。
【问题讨论】:
-
您可以尝试发布您的问题here,这是他们的问题跟踪器中有关更新缓存的帖子。您也可以尝试在How to Update Google AMP Cache 上查看本指南。希望这会有所帮助。
标签: amp-html