xAuth认证实际上是OAuth认证的简化版。目前xAuth只对桌面客户端和移动客户端开放申请。Web应用请使用OAuth。xAuth旨在增强客户端的用户体验,减少页面跳转次数。采用xAuth认证的桌面应用和移动应用可以跳过oauth/request_token(获取Request Token)以及oauth/authorize(授权Request Token)两步,只要提供了username和password以后,即可直接通过oauth/access_token接口得到Access Token。然后通过这个Access Token获取数据。
xAuth的缺点是将用户名和密码暴露给了第三方应用,所以xAuth协议只适用于开放平台特殊授权的应用,也就是说,只有当开放平台完全信任这个应用的时候才会给客户端xAuth验证的权限。
1.构造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.sina.com.cn%2Foauth%2Faccess_token&oauth_consumer_key%3D1852823608%26oauth_nonce%3D-794036333%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1291944694%26oauth_version%3D1.0%26source%3D1852823608%26x_auth_mode%3Dclient_auth%26x_auth_password%3D------%26x_auth_username%3D---------%2540sina.cn
其中 :%2540sina.cn =@sina.com
2.用刚刚生成的BaseString,经过HMAC-SHA1算法生成oauth_signature,示例如下:
iviIHhwXWmFLliZbeDoSyQ+XC1o=
3.将以下参数封装成HTTP请求头,并向oauth/access_token接口提交POST请求:
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: 单次值,一个随机字符串,防止重复攻击。该参数只支持ASCII码的字符串.
oauth_version : OAuth协议版本。填写“1.0”。
oauth_signature: 签名值,是由根据上面的几个参数生成的 Base String经HMAC-SHA1算法计算得出。
OAuth
oauth_consumer_key="1852823608",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1291944694",
oauth_nonce="-794036333",
oauth_version="1.0",
oauth_signature="iviIHhwXWmFLliZbeDoSyQ%2BXC1o%3D",
source="1852823608",
x_auth_mode="client_auth",
x_auth_password="------",
x_auth_username=---------@sina.cn
4.得到的返回结果示例如下:
oauth_token=160e537d530fd105669fd79a4f1dc286&oauth_token_secret=a9c46c081842bd08f55e8f0265d8fea3&user_id=160984721
将返回结果按"&"拆开,oauth_token的值即为access_token。
至此,以后每次用Access Token 去请求数据~
此文根据新浪开放平台XAuth的内容进行整理~