微博开放平台
微连接
移动应用
网站接入
电商服务商
电商商家
数据服务
数据服务
合作伙伴
微博支付
轻应用
粉丝服务
文档
推广
我的应用
登录
weibo
开发文档
首页
平台政策与指引
概述
平台公约
新手指南
开发者协议
应用运营管理规范
微连接分级管理办法
应用审核产品指南
应用安全开发注意事项
平台应用设计规范
微服务接入指南
微博登录接入
用微博帐号登录
授权机制
移动应用接入
移动应用介绍
移动应用SSO授权
微博Deep Link
媒体接入平台
头条文章开放接口
视频上传开放接口
电商接入平台
电商服务商接入
电商商家端接入
电商平台能力接口
粉丝服务平台
粉丝服务平台
新手接入指南
微信开发者迁移指南
接收消息
发送消息
自定义菜单
用户管理
生成带参数的二维码
Fans Service Platform
商业接口
商业数据接入指南
订阅服务手册(中文版)
订阅服务手册(英文版)
商业接口-REST API
商业数据常见问题
网站接入
网站接入介绍
微博API
微博API
接口访问频次权限
资源下载
SDK
微博标识下载
常见问题
联系我们
工具箱
链入页面
链出更改
特殊页面
查看源代码
跳转到:
导航
,
搜索
根据下列原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
==概述== 为了使用新浪微博开放平台提供的API(应用程序接口),你需要先注册一个应用。我们会给每一个应用一个专属的App Key和App Secret。Key跟Secret的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将key和secret结合,为你发出的每个请求添加签名,以此来向新浪微博开放平台表明自己身份的合法性。 Web应用应该使用完整的OAuth来进行用户认证。桌面以及移动用户也应该使用OAuth。当然,桌面和移动应用也可以使用Basic Auth,一种简单的通过用户名密码的方式来进行认证的方式,具体的说明可以参见[[授权机制说明]]页面中相关的部分。 新浪微博开放平台使用的是OAuth 1.0a 版本。 ==OAuth基本流程简介== OAuth请求循环可以分为如下四步: {{center|http://www.sinaimg.cn/blog/developer/wiki/oauth_flowchart.jpg}} OAuth提供两种认证方式:query-string和http headers。我们推荐使用http header进行认证。 ===请求签名=== 所有的OAuth请求使用同样的算法来生成(signature base string)签名字符基串和签名。 base string是把http方法名,请求URL以及请求参数用&字符连起来后做URL Encode编码。具体来讲,base string由http方法名,之后是&,接着是过url编码(url-encoded)之后的url和访问路径及&。接下来,把所有的请求参数包括POST方法体中的参数,经过排序(按参数名进行文本排序,如果参数名有重复则再安参数值进行重复项目排序),使用%3D替代=号,并且使用%26作为每个参数之间的分隔符,拼接成一个字符串。 这个算法可以简单表示为: <pre> httpMethod + "&" + url_encode( base_uri ) + "&" + sorted_query_params.each { | k, v | url_encode ( k ) + "%3D" + url_encode ( v ) }.join("%26") </pre> 无论生成何种OAuth1.0请求,生成BASE STRING的规则始终不变。 新浪微博要求所有的OAuth请求都使用<b>HMAC-SHA1</b>算法生成签名。 ===获取request token=== 获取request token是进行用户认证的第一步。这一步主要有两个目的: 第一,告诉新浪微博你将要做什么 第二,告诉新浪微博你在callback里要做什么 新浪微博开放平台的request token获取接口地址为:http://api.t.sina.com.cn/oauth/request_token 下面举个例子,以下是请求用的参数: <pre> consumer secret - "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98" oauth_callback - http://localhost:3005/the_dance/process_callback?service_provider_id=11 oauth_consumer_key - GDdmIQH6jhtmLUypg82g oauth_nonce - QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk oauth_signature_method - HMAC-SHA1 oauth_timestamp - 1272323042 oauth_version - 1.0 </pre> 第一步,用上文提到的算法形成BASE STRING。需要注意的是callback在URL中包含请求参数,由于参数只CALLBACK URL的一部分,所以并不需要将其提出成为独立的参数。 URL必须按照单个字符串来考虑。生成的BASE STRING如下: <pre> POST&https%3A%2F%2Fapi.t.sina.com.cn%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A3005%252Fthe_dance%252Fprocess_callback%253Fservice_provider_id%253D11%26oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0 </pre> 由于我们还未获取到oauth_token和oauth_token_secret,所以我们的BASE STRING里没有包含oauth_token和oauth_token_secret。 接下来使用signing key(App Secret后加一个&符)从base string生成oauth_signature: <pre> 8wUi7m5HFQy76nowoCThusfgB+Q= </pre> 接下来就可以向http://api.t.sina.com.cn/oauth/request_token 发送请求。生成的http header如下: <pre> OAuth oauth_nonce="QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk", oauth_callback="http%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272323042", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_signature="8wUi7m5HFQy76nowoCThusfgB%2BQ%3D", oauth_version="1.0" </pre> 当服务器端接到请求之后,会返回包含oauth_token,oauth_token_secret等内容,另外oauth_callback_confirmed字段如果为true就表示callback生效。服务器端的响应如下: <pre> oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_token_secret=x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA&oauth_callback_confirmed=true </pre> 这时需要将oauth_token和oauth_token_secret记下,我们需要用这个参数来获取access token。 ===用户认证=== 这一步主要是发送你获取的oauth_token,并且获得用户的授权。一般来说,WEB应用会简单的重定向到相应的页面,桌面应用程序会给出URL并要求用户自行验证. 新浪微博开放平台的验证URL是http://api.t.sina.com.cn/oauth/authorize 。要求必须以oauth作为参数,一般来说请求格式如下: http://api.t.sina.com.cn/oauth/authorize?oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc 如果用户没有登录新浪微博,则会要求用户登录。否则将会出现一个页面,用户可以在此页面上一键同意或者拒绝对此应用授权。用户授权后,web应用页面将会重定向至你指定的oauth_callback,如果是桌面应用,将会显示PIN码,用户需要将PIN码输入你的应用中来完成授权过程。 如果使用了callback,那么oauth_callback应该已经接到返回的信息,其中包含oauth_token和oauth_verifier。样例如下: <pre> oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_verifier=pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY </pre> ===获取access token=== 新浪微博开放平台access token请求地址为:http://api.t.sina.com.cn/oauth/access_token 以下是请求参数列表: <pre> oauth_consumer_key - GDdmIQH6jhtmLUypg82g oauth_nonce - 9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8 oauth_signature_method - HMAC-SHA1 oauth_token - 8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc oauth_timestamp - 1272323047 oauth_verifier - pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY oauth_version - 1.0 oauth_token_secret - x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA </pre> 第一步,准备base string(使用上文提到的方法) <pre> POST&https%3A%2F%2Fapi.t.sina.com.cn%2Foauth%2Faccess_token&oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3D9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323047%26oauth_token%3D8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc%26oauth_verifier%3DpDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY%26oauth_version%3D1.0 </pre> 接着将consumer_secret和oauth_token_secret连接起来,中间用&分割(这是准备密钥的方法,下面还会用到): <pre> MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA </pre> 生成的OAuth签名如下: <pre> PUw/dHA4fnlJYM6RhXk5IU/0fCc= </pre> 然后向给定的url发送请求,请求头部一定要包含request token,request头部如下: <pre> OAuth oauth_nonce="9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272323047", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_token="8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc", oauth_verifier="pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY", oauth_signature="PUw%2FdHA4fnlJYM6RhXk5IU%2F0fCc%3D", oauth_version="1.0" </pre> 新浪微博开放平台会返回应用需要的信息,包括用户名,oauth_token/oaut_token_secret(当然这里就是access token了)。 response内容如下: <pre> oauth_token=819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw&oauth_token_secret=J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA&user_id=819797&screen_name=openapi </pre> 现在就可以使用access token来发布信息了。 ===获取用户信息=== 接下来,就可以进行用户验证(如果验证成功,将会返回用户的详细信息)了。以下是进行用户验证的相关参数: <pre> oauth_consumer_key - GDdmIQH6jhtmLUypg82gる oauth_nonce - oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y oauth_signature_method - HMAC-SHA1 oauth_token - 819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw oauth_timestamp - 1272325550 oauth_version - 1.0 </pre> 使用BASE STRING生成算法: <pre> POST&http%3A%2F%2Fapi.t.sina.com.cn%2Faccount%2Fverify_credentials&oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3D9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272325550%26oauth_token%3D819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw%26oauth_verifier%3DpDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY%26oauth_version%3D1.0 </pre> 然后将oauth_comsumer_secret和oauth_token_secret以&作为分隔符拼起来。将拼接后的字符串作为签名的KEY进行加密,生成签名。 key如下: <pre> MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA </pre> 生成的签名如下: <pre> ICuKVLKetCO4axEppJBqOofFg/A= </pre> 接下来就可以通过http发送请求,生成的http header如下: <pre> OAuth oauth_nonce="oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272325550", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_token="819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw", oauth_signature="ICuKVLKetCO4axEppJBqOofFg%2FA%3D", oauth_version="1.0" </pre> 响应如下: <pre> { weibo=null, id=1803876591, name='loopa', screenName='loopa', location='北京 海淀区', description='2fBAcRG0]8OGRvp', profileImageUrl='http://tp4.sinaimg.cn/1803876591/50/0', url='', isProtected=false, followersCount=23, statusCreatedAt=Mon Sep 27 13:50:14 CST 2010, statusId=2847344825, statusText='uhYFQJ[', statusSource='<a href="" rel="nofollow">微博开放平台接口</a>', statusTruncated=false, statusInReplyToStatusId=0, statusInReplyToUserId=0, statusFavorited=false, statusInReplyToScreenName='', profileBackgroundColor='', profileTextColor='', profileLinkColor='', profileSidebarFillColor='', profileSidebarBorderColor='', friendsCount=1, createdAt=Fri Aug 27 00:00:00 CST 2010, favouritesCount=0, utcOffset=-1, timeZone='', profileBackgroundImageUrl='', profileBackgroundTile='', following=false, notificationEnabled=false, statusesCount=8509, geoEnabled=false, verified=false } </pre> ===小提示=== 以下是新浪微博开放平台团队在OAuth使用上的一些经验总结,希望能够让你更好的使用新浪微博的OAuth认证。 *使用基于http-header的OAuth *使用ssl - 对于所有的OAuth认证的步骤都使用SSL加密 *使用api.t.sina.com.cn - 而非t.sina.com.cn *始终使用显式oauth_callback - 一般来说应用程序使用默认的callback地址,但是我们建议每次请求都显式声明callback(在请求中指定callback). 通过动态设定callback,你可以获取一些有用的附加的信息.如果是使用PIN码的话,callback应该是"oob". ===使用OAuth发表微博=== 接下来,就可以使用获取的oauth_token和oauth_token_secret来发送微博了。发微博可以通过[[Statuses/update]]接口,以下是相关参数: * POST body - status=通过OAuth发送微博信息 * oauth_consumer_key - GDdmIQH6jhtmLUypg82g * oauth_nonce - oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y * oauth_signature_method - HMAC-SHA1 * oauth_token - 819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw * oauth_timestamp - 1272325550 * oauth_version - 1.0 接下来依然使用上文提到的BASE STRING算法生成BASE STRING如下: <pre> POST&http%3A%2F%2Fapi.t.sina.com.cn%2Fstatuses%2Fupdate.json&oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DoElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272325550%26oauth_token%3D819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw%26oauth_version%3D1.0%26status%3D%25E9%2580%259A%25E8%25BF%2587OAuth%25E5%258F%2591%25E9%2580%2581%25E5%25BE%25AE%25E5%258D%259A%25E4%25BF%25A1%25E6%2581%25AF </pre> 然后将oauth_comsumer_secret和oauth_token_secret以&作为分隔符拼起来。将拼接后的字符串作为签名的KEY进行加密,生成签名。 key如下: <pre> MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA </pre> 生成的签名如下: <pre> yOahq5m0YjDDjfjxHaXEsW9D+X0= </pre> 接下来就可以通过http发送请求,生成的http header如下: <pre> OAuth oauth_nonce="oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272325550", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_token="819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw", oauth_signature="yOahq5m0YjDDjfjxHaXEsW9D%2BX0%3D", oauth_version="1.0" </pre> 服务器端的响应如下: <pre> { "created_at": "Mon Oct 11 12:00:16 +0800 2010", "favorited": false, "geo": null, "id": 3034670049, "in_reply_to_screen_name": "", "in_reply_to_status_id": "", "in_reply_to_user_id": "", "source": "<a href=\"http://open.t.sina.com.cn\" rel=\"nofollow\">\u5fae\u535a\u5f00\u653e\u5e73\u53f0\u63a5\u53e3</a>", "text": "\u901a\u8fc7OAuth\u53d1\u9001\u5fae\u535a\u4fe1\u606f", "truncated": false, "user": { "allow_all_act_msg": false, "city": "8", "created_at": "Fri Aug 28 00:00:00 +0800 2009", "description": "Blogger\uff0c\u82f9\u679c\u8ff7\uff0cGoogle\u7c89\u3002", "domain": "westy", "favourites_count": 1, "followers_count": 83, "following": false, "friends_count": 56, "gender": "m", "geo_enabled": true, "id": 1642466141, "location": "\u5317\u4eac \u6d77\u6dc0\u533a", "name": "huchao", "profile_image_url": "http://tp2.sinaimg.cn/1642466141/50/1285424071", "province": "11", "screen_name": "huchao", "statuses_count": 209, "url": "http://tuoniao.org", "verified": false } } </pre> ==OAuth库和资源== :ActionScript/Flash ::oauth-as3 http://code.google.com/p/oauth-as3/ ::A flex oauth client http://www.arcgis.com/home/item.html?id=ff6ffa302ad04a7194999f2ad08250d7 :C/C++ ::QTweetLib http://github.com/minimoog/QTweetLib ::libOAuth http://liboauth.sourceforge.net/ :clojure ::clj-oauth http://github.com/mattrepl/clj-oauth :.net ::oauth-dot-net http://code.google.com/p/oauth-dot-net/ ::DotNetOpenAuth http://www.dotnetopenauth.net/ :Erlang ::erlang-oauth http://github.com/tim/erlang-oauth :java ::Scrible http://github.com/fernandezpablo85/scribe-java ::oauth-signpost http://code.google.com/p/oauth-signpost/ :javascript ::oauth in js http://oauth.googlecode.com/svn/code/javascript/ :Objective-C/Cocoa & iPhone programming ::OAuthCore http://bitbucket.org/atebits/oauthcore ::MPOAuthConnection http://code.google.com/p/mpoauthconnection/ ::Objective-C OAuth http://oauth.googlecode.com/svn/code/obj-c/ :Perl ::Net::OAuth http://oauth.googlecode.com/svn/code/perl/ :PHP ::tmhOAuth http://github.com/themattharris/tmhOAuth ::oauth-php http://code.google.com/p/oauth-php/ :Python ::python-oauth2 http://github.com/brosner/python-oauth2 :Qt ::qOauth http://github.com/ayoy/qoauth :Ruby ::Oauth ruby gem http://oauth.rubyforge.org/ :Scala ::DataBinder Dispatch http://dispatch.databinder.net/About
该页面使用的模板:
模板:Center
(
查看源代码
)
返回到
Oauth
。
反馈
分享
顶部