搜狐微博XAuth使用举例

搜狐微博XAuth使用举例

xAuth简介

使用xAuth认证方式,您仍然需要了解如何生成OAuth签名。

为了方便桌面应用和移动应用,特别是那些缺乏浏览器支持的应用,xAuth认证为这类应用提供了一种使用用户名和密码来获取OAuth的 Access Token的方式。 采用xAuth认证的桌面应用和移动应用可以跳过oauth/request_token(获取Request Token)以及oauth/authorize(授权Request Token)两步,只要提供了username和password以后,即可直接通过oauth/access_token接口得到Access Token。

使用xAuth

要使用xAuth认证,需要经过以下步骤:

1. 申请xAuth认证使用资格:现在Xauth权限已经对所有客户端类型应用直接开放。只要在申请应用时选择应用类型为“客户端”,都将直接开通Xauth权限。没有开通xauth权限的key将会返回403,forbidden。如果您已经获得xAuth使用权,请直接看第2步。

2. 获得xAuth的使用权后,为了能够生成OAuth签名,首先应该生成OAuth的BaseString。注意,生成BaseString时需要传入如下几个参数:

* x_auth_username:用户名

* x_auth_password:密码

* x_auth_mode:标识字段,这里必须是"client_auth"。

* oauth_consumer_key: 创建应用时生成的APP KEY。

* oauth_signature_method: 签名方法,建议使用“HMAC-SHA1”。

* oauth_timestamp:时间戳。生成Base String时的时间戳。

* oauth_nonce:单次值,一个随机字符串,防止重复攻击。

* oauth_version: OAuth协议版本。填写“1.0”。

生成的BaseString如下:

"POST&http%3A%2F%2Fapi.t.sohu.com%2Foauth%2Faccess_token&oauth_consumer_key%3D"+oauth_consumer_key+"%26"+

"oauth_nonce%3D"+noonce+"%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D"+time+"%26oauth_version%3D1.0"+

"%26x_auth_mode%3Dclient_auth%26x_auth_password%3D"+password+"%26x_auth_username%3D"+username;

3.根据oauth生成算法,.用刚刚生成的BaseString,经过HMAC-SHA1生成oauth_signature,注意这里的key是 consumer secret 后面加一个&,因为我们并没有oauth_token_secret,这是和oauth生成算法不一样的地方。生成key示例如下:

2u/xFErTc8vC1Z6R940HU3i5wAk=

URLEncode如下:
2u%2FxFErTc8vC1Z6R940HU3i5wAk%3D

4.根据以下参数向并向http://api.t.sohu.com/oauth/access_token接口提交POST请求:

·Httpheader 中的参数包括:

o oauth_consumer_key -

o oauth_nonce -

o oauth_signature_method - HMAC-SHA1

o oauth_timestamp - 1284565601

o oauth_version - 1.0

·HTTP post-body中包含的参数:

o x_auth_mode - client_auth

o x_auth_password – pwd

o x_auth_username – user_name

如下所示:

POST /oauth/access_token HTTP/1.1

Authorization: OAuth oauth_consumer_key="dbdP67NTrrNU0v2N6Yuu",oauth_version="1.0", oauth_signature_method="HMAC-SHA1",oauth_timestamp="1310372236", oauth_nonce="518611817947878737",oauth_signature="2u%2FxFErTc8vC1Z6R940HU3i5wAk%3D"

User-Agent: Java/1.6.0_13

Host: api.t.sohu.com

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

Connection: keep-alive

Content-type: application/x-www-form-urlencoded

Content-Length: 78

x_auth_username=---------&x_auth_password=------&x_auth_mode=client_auth

5. 得到的返回结果示例如下:

oauth_token=b3d804ee16d9d92820fb2f188203909a&oauth_token_secret=c2d687416889d575575ed8c2694a208b&user_id=100945678&screen_name=..&x_auth_expires=0


将返回结果按"&"拆开,oauth_token的值即为access_token。

6.如何使用access_token和oauth_token_secret来调用接口. 这里我们以查看用户详细信息为例子介绍。http://api.t.sohu.com/users/show.json

OAuthConsumer consumer = new DefaultOAuthConsumer(

"dbdP67NTrrNU0v2N6Yuu",consumer_secret);

// access_token和 access_token_secret consumer.setTokenWithSecret("b3d804ee16d9d92820fb2f188203909a","c2d687416889d575575ed8c2694a208b");

URL url = new URL("http://api.t.sohu.com/users/show.json");

HttpURLConnection request;

request = (HttpURLConnection)url.openConnection();

request.setDoOutput(true);

request.setRequestMethod("GET");

System.out.println("Sendingrequest...");

consumer.sign(request);

request.connect();

System.out.println("Response: " +request.getResponseCode() + " "

+ request.getResponseMessage());

BufferedReader reader =newBufferedReader(new InputStreamReader(request.getInputStream()));

String b = null;

while((b = reader.readLine())!=null){

System.out.println(b);

}

request.disconnect();

}

得到结果如下:

{"id":"100945678","screen_name":"未见见","name":"","location":"北京市,海淀区","description":"","url":"","profile_image_url":"http://s4.cr.itc.cn/mblog/icon/3d/6f/m_13080399324892.jpg","protected":true,"followers_count":62,"profile_background_color":"","profile_text_color":"","profile_link_color":"","profile_sidebar_fill_color":"","profile_sidebar_border_color":"","friends_count":213,"created_at":"MonMay 09 20:09:06 +08002011","favourites_count":1,"utc_offset":"","time_zone":"","profile_background_image_url":"","notifications":"","geo_enabled":false,"statuses_count":264,"following":true,"verified":false,"lang":"zh_cn","contributors_enabled":false}

HTTP 请求如下:

GET /users/show.json HTTP/1.1

Authorization: OAuthoauth_token="b3d804ee16d9d92820fb2f188203909a",oauth_consumer_key="dbdP67NTrrNU0v2N6Yuu", oauth_version="1.0",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1310437374",oauth_nonce="-4185729389431891046", oauth_signature="tEvVrQobzXoyJYqLq7qxApPQJks%3D"

User-Agent: Java/1.6.0_13

Host: api.t.sohu.com

Accept: text/html, image/gif,image/jpeg, *; q=.2, */*; q=.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值