如何为YouTube PubSubHubbub数据计算签名

问题描述

我一直在YouTube Push Notifications Subscription上工作。

我可以订阅它,并且确实收到了YouTube的推送通知。我已为此预订使用HMAC secret。我需要确认我收到的数据是从YouTube服务器发送的。我找不到任何文档来了解PubSubHubbub如何创建签名。

我尝试了以下步骤:

  1. 已标准化请求正文(即XML内容
  2. 以十六进制格式创建了SHA1摘要

但是此签名与PubSubHubbub发送的签名不匹配。

有人可以解释为此目的计算签名的步骤吗?

谢谢。

解决方法

根据PubSubHubbub Core(最新的v0.4)的官方文档,您必须严格遵循此处描述的算法:

8. Authenticated Content Distribution

如果订户在其订阅请求中提供了hub.secret的值,则集线器务必生成有效载荷的HMAC签名,并将该签名包含在内容分发请求的请求标头中。 X-Hub-Signature标头的值必须采用sha1=signature的形式,其中signatureSHA1 signature [RFC3174]的40字节十六进制表示形式。必须使用HMAC algorithm [RFC2104]以请求正文作为数据,以hub.secret作为密钥来计算签名。

订阅者收到指定了X-Hub-Signature头的内容分发请求时,应使用与集线器相同的方法重新计算具有共享密钥的SHA1签名。如果签名不匹配,则订阅者仍必须返回2xx成功响应以确认接收,但在本地将消息视为无效。将此技术与HTTPS [RFC2818]一起用于订阅请求,可使简单的订阅者从集线器接收经过身份验证的通知,而无需订阅者运行HTTPS [RFC2818]服务器。

但是请注意,此签名仅确保未伪造有效载荷。由于通知中还包含标头,因此订阅者不应将其视为安全的,除非订阅者当然使用HTTPS [RFC2818]回调。

如果您要提到使用的编程环境,我可能会为您提供进一步的帮助。