现在的位置: 首页 > 综合 > 正文

基于多米API在线音乐项目(1)——Oauth认证

2017年09月21日 ⁄ 综合 ⁄ 共 2934字 ⁄ 字号 评论关闭

基于多米API的在线音乐首先要获取Oauth认证,参数含义
* y_auth_username:用户名(第三方网站的用户名。),手机imei
* y_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”。

组合http method,http api,和参数
POST&DUOMI_URL&oauth_consumer_key=1852823608&oauth_nonce=-794036333&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1291944694&oauth_version=1.0&y_auth_mode=client_auth&y_auth_username=tom

对上面的字符串用&分割为三个部分,

1POST

2.DUOMI_URL

3.剩余部分

注意两个&将basestring分成了3个部分,分别对后两个部分进行urlencode,生成的三个字符串用&链接得到 basestring

urlencode,生成basestring
POST&http%3A%2F%2FDUOMI_URL%2Foauth%2Faccess_token&oauth_consumer_key%3D1852823608%26oauth_nonce%3D-794036333%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1291944694%26oauth_version%3D1.0%26y_auth_mode%3Dclient_auth%26y_auth_username%3Dtom
进行HMAC-SHA1算法签名,签名试用base64编码,得到oauth_signature

HMAC-SHA1算法实现见下片文章http://blog.csdn.net/hlglinglong/article/details/23440885

调用

byte[] b = HMACSHA1.getHmacSHA1(basestring, secet_key);
String s = new BASE64Encoder().encode(b);

将下列参数组装成http请求头:
y_auth_username, 
y_auth_mode, 
oauth_consumer_key,
oauth_signature_method,
oauth_signature, 
oauth_timestamp,
oauth_nonce,
oauth_version,

如下:

OAuth oauth_consumer_key="1777918451", oauth_nonce="7139484165996313698", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1397117414415", oauth_version="1.0", y_auth_mode="client_auth", y_auth_username="356723040551977", oauth_signature="3YEjyv1kzECHjfooKOp6si2rjOc%3D"

通过post方法获取到token

  HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(Auth.DM_URI_TEST);
        httpPost.addHeader("Authorization", Authorization);
        HttpResponse httpResponse;
        String string = null;
        try {
            httpResponse = httpClient.execute(httpPost);
            StringBuilder stringBuilder = new StringBuilder();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
            for(String s = bufferedReader.readLine();s != null; s = bufferedReader.readLine()){
                stringBuilder.append(s);
            }
            string = stringBuilder.toString();
            Log.d(TAG, "stringbuilder : " + stringBuilder.toString())

得到返回结果

oauth_token=75f4c5b5081baeb9aff5Fdeda9db764bca8F2303&oauth_token_secret=1mBKDgrIei1lXi1rr1onny&user_id=737899

将此结果添加到http header中调试媒体相关服务。

linux下 curl命令如下

curl -H 'session-id: 1mBKDgrIei1lXi1rr1onny' -H 'Consumer-key: 1777918451' -H 'oauth-token: 75f4c5b5081baeb9aff5Fdeda9db764bca8F2303' 'DUIMI_URL?id=26289618&lc=2D7AF634854AD63F'

得到结果

{"dm_error":0,"error_msg":"ERR:000:操作成功","num_tracks":1,"tracks":[{"album":{"cover":"http://img.kxting.cn/imageservice/scaleImage?&url=http://service-img//p1/25/25/71150698.jpg&w=240&h=240&c=0&o=0","id":2517298,"name":"Kickin' Afrolistics"},"artists":[{"id":61669387,"name":"The
Afros","portrait":"","valid":false}],"availability":"1110","duration":239,"id":26289618,"lyric":"","popularity":4,"title":"Federal Offense"}]}

至此,Oauth认证完成,可以从服务器的得到请求结果。

抱歉!评论已关闭.