Twitter全面改用OAuth认证新浪微博接口的人~~

优采云 发布时间: 2021-06-06 20:12

  Twitter全面改用OAuth认证新浪微博接口的人~~

  由于 Twitter 近期只支持 OAuth 认证方式,各大应用纷纷转向 OAuth 认证方式,新浪微博开放平台也将在近期停止 Base OAuth 认证方式。

  为了继续使用新浪微博的开放平台,我开始研究OAuth认证方式。经过一段时间的实践,对新浪微博开放平台的OAuth认证方式有了一定的体会。鉴于网上这个平台的OAuth相关资料比较少,在这里分享一下过程中积累的经验,希望能帮助到一些想使用OAuth认证的人调用新浪微博界面~ ~

  1.关于 OAuth:

  OAUth认证方式相比Base OAuth认证方式最大的特点是应用端不需要保存用户的账号和密码,只需要用户授权的Key和Secret组合即可使用平台上的接口资源访问,在传输过程中,也可以避免恶意人员通过截包分析获取用户的账号和密码。 (有一种说法,推特之所以完全切换到OAuth认证,是为了防止GFW通过截包的方式获取一些相关名人的账号和密码)。具体定义可以阅读OAuth规范定义:OAuth规范。

  2.新浪微博开放平台:

  新浪微博开放平台的基本界面、参数、返回格式均参考推特模型。当然,国内其他一些开放平台也大量借鉴了推特的模式,所以基本是一样的。要使用新浪微博的开放平台,当然要先到其网站注册:新浪微博API。

  注册后,会得到两个关键字段Consumer Key和Consumer Secret。保存它们。

  新浪微博的开发平台有足够的文档,可以快速调用这些接口。除了一些较难的接口,我们将在下面讨论。

  3.使用 OAuth 到新浪:

  

  要使用 OAuth,用户必须先获得授权。一般来说,授权流程如下:

  (1)应用向新浪开发平台发送请求,获取未授权的Request Token和Request Secret。此时Request Secret暂时不用,请妥善保管。

  (2)以上一步获取的Request Token为参数,引导用户浏览器跳转到新浪微博授权页面,用户进入该页面登录新浪微博进行token授权.如果你在(1)如果浏览器的回调地址已经设置到服务器中,用户的浏览器会被重定向到这个地址,并且会在地址中增加一个新的参数:oauth_verifier。这个参数会稍后使用并保存。

  (3)OAuth是认证过程的最后一步,向服务器请求真实的Token,将(1))中得到的Request Token、Request Secret和oauth_verifier作为参数传递给新浪微博服务器,服务端会返回真实的Access Token和Access Secret,新浪微博也会返回用户在新浪微博中的userid。有了用户的Access Token和Access Secret,就可以自由方便的调用新浪微博界面的开通。

  每次调用都必须收录 OAuth 身份验证信息。作为OAuth认证信息,添加到请求包中基本上有两种方式:

  (1)最推荐的方法是使用HTTP Authorization Header。这个header的定义在RFC2617中定义。

  例如:

  Authorization: OAuth realm="http://photos.example.net/",

oauth_consumer_key="dpf43f3p2l4k3l03",

oauth_token="nnch734d00sl2jdk",

oauth_signature_method="HMAC-SHA1",

oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D",

oauth_timestamp="1191242096", oauth_nonce="kllo9940pd9333jh",

oauth_version="1.0"

  (2)或者你可以使用参数传递的方法,把OAuth参数像普通参数一样放在Get的URL中,或者放在POST的body内容中,都是可以的,

  但是,在某些特殊情况下,解决这个问题会比较困难。

  4.OAuth 认证参数分析:

  如上所示,正常的 OAuth 身份验证收录以下参数:

  (1)oauth_consumer_key:这是新浪在注册时给你的conusmer key,纯文本传输

  (2)oauth_token:这是用户完成OAuth认证后的Access Token。在OAuth认证的第三步,就是Request Token,第一步不需要这个参数

  (3)oauth_signature_method:加密方法,提供HMAC-SHA1、RSA-SHA1、PLAINTEXT几种方法

  (4)oauth_signature:所有参数的加密字符串,包括消费者秘密和访问秘密

  (5)oauth_timestamp:请求的时间戳

  (6)oauth_version:可选参数,基本设置为1.0,否则会报错。

  (7)oauth_nonce:防止重复调用的随机值

  5.OAuth上传图片的痛苦:

  使用上面的方法,基本上所有的接口调用都可以解决。但是当你遇到上传图片等困难的请求时,你需要一些技巧。

  新浪微博开放平台要求上传图片时使用multipart/form-data。但是,当定义 OAuth 协议时,Content-Type 被描述为 application/x-www-form-urlencoded。没有提到如何在 multipart/form-data 中使用它。

  在新浪微博的开放平台上,基本上网上找不到任何地方提到通过OAuth上传图片。在 Twitter 上尝试和学习了一晚之后,

  终于找到解决办法了。

  基本上,协议中没有规定的内容,必须由私营部门以更直观的方式解决。在新浪微博界面上传图片,必须使用multipart/form-data作为Content-Type,OAuth认证参数不能放在form-data中,必须通过Authorization Header进行处理。这时候就必须除了file参数之外,在这个界面,status是加到oauth的加密里面的,但是没有出现在Authorization Header里面,而是后面加到了fom-data中,这样图片可以正常上传,可以发布微博。通过这个简单又麻烦的方法,我终于可以安全的上传图片到新浪微博了。

  6.last

  到目前为止,我已经成功调用了新浪微博的大部分接口,并开始覆盖搜狐微博、网易微博等开放平台。希望可以通过这个文章记录一些经验和教训。

  7.参考资料

  [RFC5849]E。哈默拉哈夫,埃德。 《OAuth 1.0 协议》,RFC5849

  [RFC1867] E. Nebel,L. Masinter,“HTML 中基于表单的文件上传”,RFC1867

  [RFC2616] Fielding,R.,Gettys,J,e "超文本传输​​协议 - HTTP/1.1", RFC2616

  [RFC2617] Franks,J.“HTTP 身份验证:基本和摘要式访问身份验证”,RFC2617

  新浪微博开放平台:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线