技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> 深入理解OAuth与豆瓣OAuth test

深入理解OAuth与豆瓣OAuth test

浏览:3876次  出处信息

OAuth从出生似乎得到了太多业界的关照..几大被墙网站都有OAuth验证API..

今天在群里聊天.有人问我:国内除了豆瓣人人新浪微博.还有哪个提供api了?

我一时语塞..为国内的环境感到一丝凄凉..

扯远了..我们今天就来分析一下OAuth..怎么来用OAuth.

写这篇文章的原因就是我学习OAuth协议的时候..搜索到一些文章..都是出自一个叫[OAuth开发文档.docx]的文档中的..

比较笼统..并且不容易理解..

所以我想我有必要用我自己的话来描述一下OAuth协议.

为了更好的解释.我们就用豆瓣来举例吧.

一个用户A在豆瓣上注册了一个账号. 登录进去后他可以进行一些动作.比如发布广播等.

那么好.现在有个网站B..想让A在我的网站上发表一个广播..

但是有个问题..网站B对于用户A来说是不可靠的..用户A不想把自己的账号密码放到网站B上..

另外.网站B对于豆瓣来说也是不可靠的..豆瓣不知道网站B是不是真正的用户A.

为了解决这个问题..这三个人(豆瓣/用户A/网站B)就坐一起开了个小会..

会议的结果就是OAuth协议.

这个协议为了安全看起来是有点复杂的..下面我就简单的说下步骤..我有些比喻是不恰当的.只是让大家理解步骤而已.

大的步骤来说有三步.

在这些步骤之前..网站B得去豆瓣申请一个信物1(oauth_consumer_key)和一把钥匙1(oauth_consumer_secret)(钥匙很多.这个钥匙叫做钥匙1)..算是两人见面认识一下..然后网站B再去拜访豆瓣.豆瓣可以认识说:哦.这不是B吗?

第一步.

网站B拿着钥匙去跟豆瓣说.hi兄弟.我来了..然后豆瓣说:我只认钥匙不认人的.掏出来你的信物1(oauth_consumer_key)和钥匙1(oauth_consumer_secret)我来识别下.

这时候网站B战战兢兢的拿出来.. 豆瓣验证后说: 噢 没错. 你就是B. 那好.我再给你另外一把钥匙2(oauth_token_secret)和信物2(oauth_token)..

网站B就拿着回去了.

第二步.

这时候用户A就要参与进来了.. 网站B拿着信物2(oauth_token)和钥匙2(oauth_token_secret)带着A又来拜访豆瓣..这时候三个人站一块..豆瓣先要验证用户A是不是真的.

表现到动作上来讲就是用户A需要在豆瓣上登录一下..如果验证成功.豆瓣就需要问下用户A了.

豆瓣说: A啊 你认识那个B吗? 你让他动你的东西么?

A说: 认识认识啊 他是我好兄弟. 我的东西他随便动..

这时候豆瓣就知道了. 那好..那网站B就可以从我这里增删改你的东西了.

另外.网站B还是提供给豆瓣一个后门.. A同意后.豆瓣就要求A用户拿着钥匙2去后门找网站B了

第三步.

如果上面都还算顺利的话..网站B就拿着钥匙1(oauth_consumer_secret)跟钥匙2(oauth_token_secret)再去拜访豆瓣..

豆瓣再次验证通过后.就会给网站B一个钥匙3(oauth_token_secret)和一个信物3(oauth_token)..

这个虽然名字上为oauth_token.但是我们普遍都叫做oauth_access_token.

这时候对于用户/豆瓣来说.网站B就可以信任了.

如果以后网站B想要去修改用户A的内容.需要拿上钥匙1(oauth_consumer_secret)和钥匙3(oauth_token_secret)去找豆瓣就可以了.

到此为止.这个过程就结束了..

上面的步骤大体是这样的..但是有些细节的不同.比如签名加密等..

这个就可以从我的代码中仔细去理解了.

我们可以拿豆瓣的API去测试一下.

获取access_token的话.如果你喜欢用开源的OAuth库也可以..我为了自己理解.所以写了一个.

拿到access_token后.每次去增删改东西的时候.都需要把URL secret等都签名一下..放到header里面.

当你请求API的时候.比如是发表一个广播 这个API的URL是http://api.douban.com/miniblog/saying

每次你请求.豆瓣都要check一下这个头..看看是什么验证的..

比如他一看头里面是Authorization: OAuth..噢知道了 是OAuth验证.

这时候他就去检查那些必要的字段.比如oauth_consumer_key等.

剩下的大家就可以去看OAuth协议 看我的代码了..

我写了一个douban的test 你可以去试一下.

你要先去申请一个应用.然后修改config.php中的地址..

doubantest

建议继续学习:

  1. 豆瓣的Url结构方式一览    (阅读:6660)
  2. 别得瑟了,你很可悲!    (阅读:6441)
  3. 新浪微博OAuth认证流程分析    (阅读:4074)
  4. 基于PECL OAuth打造微博应用    (阅读:4068)
  5. PHP for Twitter OAuth 教学演示    (阅读:3538)
  6. 在sae中利用SaeFetchurl进行豆瓣的OAuth授权    (阅读:3584)
  7. OAuth那些事儿    (阅读:3200)
  8. OAuth 1.0a与1.0协议的改进…    (阅读:2899)
  9. 新浪微博 Android SDK中OAuth2.0隐式授权部分的一个代码逻辑问题    (阅读:2488)
  10. [演讲稿]OAuth1.0协议    (阅读:2407)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1