因此,我使用gadgets.io.makeRequest(url, callback, params)
从 Gmail 上下文小工具发出请求并在服务器端验证这些请求。
为了澄清,我在小工具端使用了以下 makeRequest 参数:
params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.DOM;
params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
params["OAUTH_SERVICE_NAME"] = "HMAC";
params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
我从https://www.google.com/gadgets/directory/verify
获得了小工具的 consumerKey 和 consumerSecret根据 Google 的文档,请求是由容器根据OAuth 签名过程HMAC-SHA1 方法签名的。
在服务器端,我收到以下请求:
然后我根据谷歌应该使用的相同 OAuth 规范签署这个请求,但签名不匹配。
我已经尝试使用 2 个不同的库对请求进行签名:
- 我们自己开发的 .Net 库,用于对 Gmail IMAP OAuth 授权请求进行签名(它使用相同的签名方法,并且在那里工作得很好)。
- 贡献的 opensocial 库之一(http://code.google.com/p/opensocial-net-client/)
两个库都产生相似的签名基本字符串。然而,奇怪的是,它们产生了不同的签名,并且这些签名都不匹配谷歌在 oauth_signature 参数中发送的签名!
各位小工具开发者,我希望你们中的某个人比我更幸运,并且使这种签名验证方法起作用。请告诉我我在这里做错了什么。
提前谢谢,
布鲁