PHP 编程 · 2011/09/06 0

OAuth 开发注意事项(国内平台:新浪,豆瓣,腾讯等)

唉,实在不才最近才开始看OAuth, 于是一蛋疼把国内几个主要平台(豆瓣,新浪,网易,腾讯,人人)的OAuth授权都做了,顺便也做了谷歌,小鸟的…面书开发人员注册太麻烦就没弄了. 有OAuth 1.0 也有 OAuth 2.0 的, 总结大致如下,主要针对国内平台:

1. 开发前,要确认你得HMAC-SHA1算法是无误的:
要说的一点是所有平台的 HMAC-SHA1 算法都是一样的, 所以一旦你确定了你的加密算法是正确的, 就无须在者方面纠结了.详细的算法,建议参照小鸟的开发文档.

2. 注意生成签名的参数的顺序
如果遇到问题, 建议调整顺序, 或者删除参数(如腾讯的文档里, 做 accessToken 的时候是不需要 callback参数的), 但是一般他们的文档里总有一个是正确的不是参数表,就是baseString.

3. 文档是用来参考的, 一认真你就输了:
这国内文档的坑爹性是显著的,举个最坑爹的例子: 新浪微博. 新浪的文档应该是直接抄袭推特的,但是这点并不是我发现的,而是我实实在在的确认了一下.你用他 request Token 例子中的 baseString + 他提供的实例密钥 做签名的时候是,无论如何也无法算出和他给出的签名相同的结果的,因为这个签名的是直接从小鸟的开发者文档上抄袭下来的.但是因为文档是抄袭的,所以只要不是精确的结果,大体上都是过得去的.至于人人的文档写的还是可以的.谷歌,小鸟这些是英文文档我这样的半桶水就能看懂,就更不用说了.

4. 腾讯的授权校验需要注意
1.发送requestToken里的 oauth_callback 参数,在做签名的时候需要urlencode两次:如 回调的网址是 https://xwsoul.com 你要encode为:http%253A%252F%252Fxwsoul.com 而不是 http%3A%2F%2Fxwsoul.com.而url中oauth_callback 仅需要encode一次
2. 做 accessToken 的时候是不需要 oauth_callback 参数的.

5. OAuth2.0 比 OAuth 1.0 更省力
无须签名, 一次验证…就可以获得授权 token, 只不过是授权有过期时间,需要refresh token来刷新授权.

6. 做OAuth 1.0 的签名一定要细心, 和有耐心, 如果稍有不慎就会出错,这是很让人懊恼的.