6

深入理解OAuth与豆瓣OAuth test

 3 years ago
source link: https://blogread.cn/it/article/2196?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

深入理解OAuth与豆瓣OAuth test

浏览:3104次  出处信息

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

觉得文章有用?立即:

和朋友一起 共学习 共进步!

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK