搞清如何使用oAuth 1.0 & 1.0a

简介:

前言

看这篇博文的朋友,我建议先去了解一下什么是 oAuth 1.0 & 2.0的认证,对于,一些很基本的概念,各大提供该认证的网站应该说的很清楚了,这篇博文是比较细的说下,在oAuth 认证时遇到的问题,以及整个认证客户端api调用的过程

我说下,目前我知道的提供oAuth 认证的网站(墙外的这里就不提了),大家如果想补充的话,我非常欢迎.

 

oAuth 1.0 || 1.0a

豆瓣

http://www.douban.com/service/

腾讯

http://open.t.qq.com/home/

360开发者平台

http://open.app.360.cn/

网易开放平台

http://open.t.163.com/

搜狐开放平台

http://open.t.sohu.com/

 

oAuth 2.0

新浪微博

http://open.weibo.com/

百度链接

http://dev.baidu.com/connect/

人人网

http://dev.renren.com/

360开发者平台

http://open.app.360.cn/

 

以上是我知道是使用oAuth 认证的的开放平台,特别说一下,oAuth 1.0爆发了 一个漏洞,所以就会有个oAuth 1.0a的版本,至于oAuth 1.0 和 oAuth 2.0 的区别?自己百度一下吧.

以上网站,我基本都比较过了,oAuth 2.0的操作简化了很多(墙外对这个oAuth2.0 支持得还是不错的),方便了很多,而且新浪那个例子写得很不错,所以,我这篇博文,并不打算说oAuth 2.0,因为,之前我还写了一个jQuery Mobile 的教程,打算做一个项目来贯通所有知识点,我选用的是豆瓣API,由于,豆瓣API提供的PHP框架实在够庞大,而且,我用的免费空间商肯定是不支持那个框架,当然,最近,豆瓣上有人开源了一个PHP的豆瓣API框架,不过,等到我知道的时候,我已经把oAuth 部分的代码写好了,

这里,我就分享一下我使用oAuth 1.0 api 的经验 


 

第一步: 获取未授权的Request Token

整个oAuth 最麻烦的的就是构建算法体系,豆瓣在这方面是直接给了一个开源库给我们参考

http://code.google.com/p/oauth/

腾讯的文档有对整个算法的伪码解释,不过,我个人建议,还是下载开源库直接参考,我看了一下,国内的开放平台对签名的算法一般都支持HAMC-SHA1,有些,例如腾讯就只支持HMAC-SHA1,所以,我个人建议,看HMAC-SHA1算法就足够了.我提供的开源库在最困难的签名算法部分都已经进行实现,所以说,可以随便使用.

好了到编码部分:

oAuth 1.0a ,目前大部分的用oAuth 1.0 版本认证开放平台的用的版本

不过,开源库里面用的还是oAuth 1.0 的标准对于callback 没有必要性的要求,所以代码在创建oAuthconsumer时构对callback 没有做强制要求,但是,我们现在的oAuth 1.0 在第一步中是就必须要求这个参数,我测试了一下,在腾讯开放平台中,不加callback参数是肯定访问不了,在豆瓣API中就算第一步没要求加callback 即使加上了也没有关系.

用PHP代码实现 Request Token 的链接

 
    
  1. <?php   
  2. require_once 'OAuth.php';  
  3. $request_token_url = ‘https://open.t.qq.com/cgi-bin/request_token’;  
  4. //从服务商获取的  
  5. API KEY$key = ‘xxxxxx’;  
  6. $secret = ‘sssss’;  
  7. $callback =’null’;   
  8. //这个在oAuth 1.0标准中不强制要求,也是漏洞的所在,不过这个漏洞的成功率极低.. 在oAuth1.0 a 这个参数是必须的  
  9. //生成消费方  
  10. $consumer = new OAuthConsumer($key,$secret,$callback);  
  11. //生成签名用链接  
  12. $req_token_url = OAuthRequest::from_consumer_and_token($consumer,NULL,”GET”,$request_token_url);  
  13. //进行链接签名  
  14. $req_token_url->sign_request($sig_method,$consumer,NULL);  
  15. //打印出我们的链接echo $req_token_url->to_url();  
  16. //进行链接签名  
  17. $req_token_url->sign_request($sig_method,$consumer,NULL);  
  18. //打印出我们的链接  
  19. echo   
  20. $req_token_url->to_url()  
  21. ;?> 

 这里还算比较简单的,如果是

豆瓣的返回信息:

oauth_token=xxxxxxx&oauth_token_secret=xxxxxxx

腾讯的返回信息:

oauth_token=xxxxxxx&oauth_token_secret=xxxxxxx&oauth_callback_confirmed=true

这里要记住的是oauth_token_secret 记得好好保存,因为在第三步的时候是必须的!

在第二步授权完毕后

在第三步要与授权的oauth_token组成新的消费方.

第二步:请求用户授权Request Token

这一步比较简单…上PHP代码

 
    
  1. <?php       
  2. $authorize_url = “https://open.t.qq.com/cgi-bin/authorize”;     
  3. $oauth_token =’上一步中获取的oauth_token’;     
  4. //以下是可选参数,成功授权后带参数跳转到相应页面,具体参见服务商   
  5. //豆瓣>     
  6. $callback = ‘www.yourapp.com’;   
  7. //腾讯的 $wap =’’      
  8. //参数如有特殊字符需要urlEncode ,带链接的请求这步是必须的   
  9. $params = array();    
  10. $params[‘oauth_token’]=$oauth_token;    
  11. $params[‘callback’] = $callback;   
  12. //根据自己的需要更改.   
  13. //生成用户授权链接   
  14. $url = $authorize_url.’?”.http_build_query($params);    
  15. echo $url;   
  16. ?> 

 拷到浏览器就会跳转到授权页面
 

豆瓣的话,就是授权成功了

腾讯的话,还带了验证码,这个要认真阅读文档!!!!

第三步:使用授权后的Request Token换取Access Token

授权成功以后,如果是oAuth 1.0 就十分方便..直接用第一步获得的oauth_token 和 oauth_token_secret 组成一个oAuthToken 添加到第一步的那个null参数里面就可以取得那个用于获取access token 的链接

如果是用豆瓣的话你只需这样:

 
    
  1. <?php     
  2. require_once 'OAuth.php';   
  3. $access_token_url = ‘http://www.douban.com/service/auth/access_token’;   
  4. //从服务商获取的API KEY $key = ‘xxxxxx’;   
  5. $secret = ‘sssss’;        
  6. // 第一步中获得的两个参数,确认在第二步中$oauth 获得授权以后才能够访问成功     
  7. $oauth = ‘xxxxx’;     
  8. $oauth_secret = ‘xxx’;     
  9. //生成 访问用的token   
  10. $token = new OAuthToken($oauth,$oauth_secret);     
  11. //生成消费方  
  12. $consumer = new OAuthConsumer($key,$secret);  
  13. //生成签名用链接  
  14. $req_token_url = OAuthRequest::from_consumer_and_token($consumer,$token,”GET”,$request_token_url);  
  15. //进行链接签名  
  16. $req_token_url->sign_request($sig_method,$consumer,$token);  
  17. //打印出我们的链接  
  18. echo $req_token_url->to_url();  
  19. ?> 

 拷到浏览器中,你就获取到我们用于访问用户资源的两个参数oauth_token 和 oauth_token_secret,豆瓣的话还会返回用户的ID.

腾讯的话,记得在授权的时候加上验证码,一样可以获得

对于Access Token 的期限.

一般而言,access token 的实效一般是用户取消授权才会失效,不过,听说也有有时效的,这个,我得去找找是哪家

总结

其实,这个认证各大服务商都提供了相应的SDK 让我们非常简单的使用他们提供的服务,只要填上APIKEY 剩下的就是客户授权的问题,要不是,豆瓣提供的PHP的 SDK,我准备用的空间商无法支持,我也懒得搞清楚是怎么认证的.oAuth 1.0 应该还能用很长一段时间,不过,oAuth 2.0 才是未来(墙外的基本都用 2.0 版本),听说,oAuth 2.0 在使用上简单了很多,看了一下新浪的的确如此,早知道,就不用豆瓣的了…哎….晚些时候,补上一个支持oAuth 1.0&1.0a 的demo,有或者直接看服务商的… 

本文转自 liam2199 博客,原文链接:http://blog.51cto.com/youxilua/773035   如需转载请自行联系原作者

相关文章
|
Web App开发 存储 安全
如何在移动端开发中正确地使用OAuth协议:常见错误剖析
作者在之前的文章中曾经介绍过 OAuth2.0 协议,并将其与OpenID和SAML性对比。然而,在理论上设计协议是一回事,在工程中实现协议是另一回事,由于很多开发人员没有真正理解OAuth2.0的设计意图和技术细节,导致OAuth2.0在很多项目中的实现是有问题,尤其是在移动端的开发中。
1704 0
|
4月前
|
安全 API 开发者
惊!Python开发者必看:OAuth与JWT授权机制的惊天秘密😱
【8月更文挑战第4天】在现代软件开发中,尤其在Web和移动应用领域,用户认证与授权至关重要。对Python开发者来说,OAuth与JWT是两大利器,能显著提高应用的安全性并优化用户体验。OAuth通过“授权而非认证”的理念,安全地让用户授予第三方应用访问权限;JWT则是一种自包含的令牌格式,确保信息的安全传输。二者结合使用,可以构建坚固的认证体系。掌握这些核心技术,让您的应用更安全、更高效。
38 1
|
4月前
|
存储 JSON 安全
从入门到精通:Python中的OAuth与JWT,打造无懈可击的认证体系🔒
【8月更文挑战第4天】构建现代Web和移动应用时,用户认证与授权至关重要。Python集成OAuth和JWT技术,能轻松实现安全认证。本文从OAuth基础入手,介绍如何使用`requests-oauthlib`库简化流程,再到JWT进阶应用,利用`PyJWT`库生成及验证令牌。最后,探讨如何结合两者,创建无缝认证体验。通过代码示例,由浅入深地引导读者掌握构建坚固应用认证体系的方法。
103 2
|
3月前
|
JSON 安全 API
Python开发者必看:OAuth与JWT授权机制的惊天秘密😱
【9月更文挑战第9天】在现代软件开发中,尤其在Web和移动应用领域,用户认证与授权至关重要。对Python开发者而言,OAuth和JWT是提升应用安全性与用户体验的关键技术。OAuth通过“授权而不认证”的理念保障用户数据安全,JWT则利用JSON Web Tokens实现无缝的信息传递。两者结合可构建高效且安全的认证体系。掌握这些技术,将使你的应用更加出色。
25 0
|
7月前
|
JSON 安全 API
在Python Web开发过程中:请简要介绍OAuth和JWT两种认证方式,并说明何时使用它们。
OAuth是开放授权协议,用于第三方应用安全访问用户资源;JWT是JSON格式的安全令牌,用于传递身份和权限。OAuth适合第三方登录和API访问,JWT适用于单点登录和分布式系统中的身份验证。选择取决于应用场景,两者都需确保安全实施,如加密和签名验证。
54 4
|
7月前
|
存储 安全 Java
【揭秘OAuth协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略OAuth协议的奥秘,告别SSO的迷茫与困惑
在现代的网站中,我们经常会遇到需要用户登录的情况。然而,直接要求用户注册可能会显得繁琐,导致用户的流失。为了解决这个问题,网站可以采用OAuth授权机制。通过与像GitHub或其他第三方网站的认证授权合作,网站可以获取用户的相关信息,避免了繁琐的注册过程。
89 0
【揭秘OAuth协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略OAuth协议的奥秘,告别SSO的迷茫与困惑
|
7月前
|
存储 监控 安全
OAuth 2.0进阶指南:解锁高级功能的秘密
OAuth 2.0进阶指南:解锁高级功能的秘密
395 0
|
存储 API 数据库
OAuth 2 实现单点登录,通俗易懂...(上)
OAuth 2 实现单点登录,通俗易懂...(上)
579 0
OAuth 2 实现单点登录,通俗易懂...(上)
|
存储 缓存 NoSQL
通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录
今天和大家分享一下使用GoFrame的gtoken替换jwt实现sso登录的经验,为了让大家更好的理解会带大家读一下重点的源码。
156 0
通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录
|
安全 Java API
OAuth 2 实现单点登录,通俗易懂...(下)
OAuth 2 实现单点登录,通俗易懂...(下)
259 0
OAuth 2 实现单点登录,通俗易懂...(下)