XAuth——Android客户端授权认证


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的内容进行整理~

相关内容