Android下的微博(新浪)-->第一步获取未授权的Request Token

去新浪下载java版本的SDK用在Android上

发现不能用~~就想是不是可以自己通过GET或者POST方式连接

新浪的微博然后再调用API后来发现这是个逻辑性的错误

新浪的正常连接微博的指令都是从SDK里面来的~~

而你直接去连接他的SDK还是那些东西这样是永远连接不上的

所以应该先将SDK改成我需要的模式~~然后再调用连接微博的API才对

====================华丽的分割线===================

2010年9月2日

明白了3方的关系 

仔细看了下OAuth的验证

http://www.oschina.net/bbs/thread/7713

我们是作为消费方与服务方(新浪)进行交互

  • 第 1、从服务提供方获取 Customer Key/Customer Secret。
  • 第 2、提供与服务提供方之间基于 HTTP 的通信机制,以换取相关的令牌

 

 我们作为消费方的所以在新浪上创建了应用的同时新浪会给我们2个东西

App Key和App Secret这两个东西

这两个东西是干什么用的?

我们 向 服务提供商 申请接入权限

翻遍了所有的网站都不知道那两东西是啥

后来慢慢的捋顺关系明白了

App Key=Consumer Key,App Secret=Consumer Secret

其实是MD一样的东西呵呵

既然知道是什么就继续吧

网上80%都说把这两东西放入 HTTP 请求中发送到服务方就OK了可以得到Request Token

我擦了~~怎么放啊~~鬼才知道~~没招继续查找~~突然眼前一亮找到了2个网站

http://isouth.org/archives/286.html

http://kejibo.com/oauth/

再看看MD果然没有那么简单~~~

 又上新浪API仔细的看了看

有了如下发现

 

认证流程及访问资源流程 

获取未授权的 Request Token 
用户授权该Request Token 
通过authorize得到用户授权后的 Access Token
使用Access Token访问或修改受保护资源

常见问题  
 在第一步获取Request Token时,需要使用Consumer Key和API Key Secret进行签名 的Consumer Key Secret。
 在第二步换取Access Token时,需要使用Consumer Key,API Key Secret、Request Token和Request Token Secret进行签名。而Request Token和Request Token Secret对应签名中的Token和Token Secret
 而在第三步访问受限资源时,需要使用Consumer Key,API Key Secret、Access Token和Access Token Secret进行签名。
请注意区分三次签名中用到的Key、Token和Secret,这是签名不匹配的一个常见原因。
对于上传图片的接口,需要使用MultPart,认证时图片不加入baseString做签名。
对中文字串做URLEncode时,注意确定生成的串中的字母必须为大写。
如何获取用户ID,在oauth认证最后一步接口会返回当前认证用户的ID,参数为:user_id。

 OK下面的就是获取未授权的 Request Token

 uil:http://api.t.sina.com.cn/oauth/request_token

请求参数
1  oauth_consumer_key,consumer_key,即创建应用时生成的 App Key 
2  oauth_signature_method 签名方法,建议使用HMAC-SHA1
3  oauth_signature 签名值
4  oauth_timestamp 时间戳 
5  oauth_nonce 单次值,随机字符串,防止重放攻击
返回值包括未授权的Request Token和对应的Request Token Secret
5个参数?比别的要求的少一般别的是要7个参数剩下的2个

  • oauth_version,现在为 1.0
  • oauth_callback,使用客户端的时候可以空着 oauth_callback,twitter能懂的~

其实最后2个好像也是可有可无的

下面是对要用到的5个进行解释

1不解释了

2不用管就写HMAC-SHA1就可以了 (是一种签名方式可以自定义的)

3比较麻烦下面细说(签名值)

4就是当前时间距 1970 00:00:00 GMT 的秒数,注意必须为整数值

5随即生成的每次都不一样就可以了

详细解释下第3个参数oauth_signature签名值

他的获得是靠第二个参数oauth_signature_method 签名方法的规则生成的

而oauth_signature是由2部分组成的

base string和签名 key

1base string是由它由 HTTP 方法名、URL 编码的请求路径和请求的参数表组成。

 

http方法无外2种get/post

URL 编码的请求路径就是通过加密后的路径(我自己的理解)urlencode之后的 Request token URL(别人的解释)

请求的参数表-->除了 oauth_signature 之外的所有参数按照名称经过重新排序之后使用&号连接,最后 urlencode

ZB:

OAuth base string:POST&http%3A%2F%2Fapi.t.sina.com.cn%2Foauth%2Frequest_token&oauth_consumer_key%3D2036474958%26oauth_nonce%3D1545667454%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1283502556%26oauth_version%3D1.0%26source%3D2036474958

2签名 key  它就是由我们在创建程序时获得的 Consumer secret(App Secret) 和 oauth_token_secret 用 & 连接而成

但是我们现在做的是获得未授权的token还没有得到oauth_token_secret那就oauth_token_secret 为空,不过中间的 & 不能省。

注意

在使用 GET 方式传送时,oauth_signature 不需要再进行 urlencode 了,

但是在使用 POST 方式,将所有参数放在 header 里的时候,oauth_signature 还需要再进行一次 urlencode 。

 

好了,现在我们获取未授权 Request Token 时需要的参数都齐备了,连接到创建程序时获得的 Request token URL 之后,得到类似这样一个地址

http://api.t.sina.com.cn/oauth/request_token?oauth_consumer_key="2036474958",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1283508561",oauth_nonce="-681506933",oauth_version="1.0",oauth_signature="kZfGa2Mo1XaeO5zA1FK6wK2bWKw%3D"

(可以将上面的粘贴下来放在网页里查看下是什么东西?403访问指定资源被禁止)

 

如果成功会有类似下面代码

oauth_token=7b5df7e735523e540d9b9385dea44566&oauth_token_secret=e249861f7d04233bb49934a688093eef

 &oauth_callback_confirmed=true-->这个callback看你前面的参数里有没有了要是有这里就会有

 

很轻松地就可以提取出来 request_token 和 request_token_secret 吧,

http://api.t.sina.com.cn/oauth/authorize?oauth_token=7b5df7e735523e540d9b9385dea44566

(可以打开~~会得到pin码~~有什么用后面再说)

不过此时的 Request Token 还是未授权的

以上的就是获取未授权的Request Token

当然还有一些东西自己还有点不是很清楚呢~~比如签名 key 的样式我没有找到无法列出来

 

posted @ 2010-08-31 15:37  飞翔的熊猫  阅读(2959)  评论(1编辑  收藏  举报