Yahoo Oauth1.0认证流程--难用--谁用谁知道(附代码加demo演示)

hudie631489527 2011-09-15 08:55:11
为了方便日后的维护,此认证流程相对比较麻烦些,所以在此整理一下
参考: http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html

大体介绍:
总流程分为五步,分别是:

1. 登录Yahoo申请应用,得到consumer key 与 consumer secret
2. 利用consumer key 与 consumer secret换取oauth_ token,即获取请求令牌
3. 引导用户在Yahoo进行授权,并返回授权的认证签名参数oauth_verifier,同时之前的oauth_ token也会一并返回
4. 利用返回的oauth_verifier, oauth_token加上第一步的consumer key 与 consumer secret,加上第二步返回的oauth_token_secret,组合起来向Yahoo换取一个访问令牌oauth_token(此时已经是可以访问用户数据的访问令牌,跟之前的请求令牌不一样)
5. 当访问令牌失效时,可以提交第四步返回的数据,交换一个新的有效令牌.


具体细节:

1. 进入http://developer.yahoo.com/ 申请应用,注意App Domain一定要写上自己的域名,不然之后的认证是无法通过的
2. 在此做了一个引导脚本,此脚本主要通过curl获取一个请求令牌,这里请求地址上务必带上oauth_callback 参数,这样Yahoo返回的参数中就会有一个xoauth_request_auth_url 参数,此参数会引导用户去Yahoo授权,这样可以简化我们去构造它的麻烦,此外,为了在主脚本中能用到参数oauth_token_secret,在此我将它写入cookie中
3. 当授权成功后,Yahoo会引导用户进入第2步中oauth_callback参数传递过来的地址,并带有两个参数oauth_verifier, oauth_token,接受这两个参数,构造兑换访问令牌的请求地址,在此注意的是oauth_signature 这里根据Yahoo的要求,需要consumer secret与oauth_token_secret,并按consumer secret%26oauth_token_secret的要求赋值,这里我们用的oauth_signature_method方法是 PLAINTEXT,不然这oauth_signature的构造方法得遵从Oauth1.0的定义哦
4. 兑换访问令牌成功后会返回访问令牌oauth_token,用户唯一标识符xoauth_yahoo_guid,还有一个用于刷新过期访问令牌的oauth_session_handle,当然访问令牌的过期时间,这里也一并返回了,让咱们有个过期的心里准备
5. 到这里了,也就没啥好说的,我很少用到这个功能,要如果真的用的话,也跟第4步一样的请求方式去跟Yahoo打个招呼,他就会返回给你,你想要的了认证做完了,到此处还好,基本一切正常,只是Yahoo的帮助文档内容太少,没有一些代码例子,没有一定的基础还真的不容易懂啊

最让人蛋疼的就是Yahoo的API了,帮助文档上更一笔带过,这叫Yahoo的Oauth1.0怎么能被人广泛使用呢?!
这里,我也是找了一些资料取了一些自己要用的函数,来实现了,因为Yahoo对于API中oauth_signature的要求,非得是HMAC- SHA1,不能是PLAINTEXT,所以这样问题就来了,Yahoo把问题交给了Oauth官网,想必很多开发者都在这里停住了吧,老是返回 signature_invalid,看这些字母看得郁闷至极,也找不到帮助资料,怎么办?继续找,终于找到一个半成品,里面正好有关于 signature的生成函数,my God看了一下,这里面的生成真是规矩啊,先给它参数排个序,再来hash_hmac加密,就这样,这层纸被捅破了.另外开发者还得了解一下如何用 curl发送请求头信息,因为oauth1.0的请求数据都是放在请求头中的(可能这样更有效率,不过怎么更高级版本2.0的怎么就没有这样处理)

眼见为实,点击看demo

比Yahoo提供的SDK简单明了,下载地址

Buty's Blog

小结一下:
做Yahoo的Oauth1.0认证的朋友,要承受一定的心里压力,要在骂Yahoo的时候,也要相信他,同时基本的技能要扎实
PS:要想用Oauth来得到Yahoo的用户自身的邮箱的朋友,请你获取到后,告诉我一声
...全文
332 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

20,360

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧