发布时间:2015-05-27 19:22:12作者:知识屋
1、主要用于第三方获取用户资源 普遍用于第三方登录授权获取用户信息
2、是一种协议RFC-5849(不是软件或服务)
3、认证+授权
163 | 开心网 | 新浪微博 |
---|---|---|
1、由流程图我们可以看出需要以下几步
0、获取用户Key与Secret(流程图之外)【server/create_consumer.php】
1、获取Request Token 与 Request Secret 【client/get_request_token.php】2、返回Request Token 与 Request Secret 【server/request_token.php】3、重定向授权页 ――"【server/authorize.php】4、用户授权回调 ――|5、获取Access Token 与 Access Secret 【client/get_access_token.php】6、返回Access Token 与 Access Secret 【server/access_token.php】7、调用api(流程图之外)【client/get_api.php】8、返回api获取的数据(流程图之外)【server/api.php】代码目录结构
2、代码实现流程
0:server/create_consumer.php客户端生成consumer key与consumer secret
';echo 'Consumer secret: ' . sha1(OAuthProvider::generateToken(40));OAuthProvider : OAuth提供者类
generateToken :生成一个随机令牌
generateToken这个函数需要注意性能我们注意第二个参数 dev/random 与 dev/urandom性能上有区分 此处不做详细说明请根据自己项目调优
具体性能信息请参考:/dev/random Mcrypt响应慢的一个原因
sha1:使用HMAC-SHA1算法生成签名
百度:OAuth请求可以使用HMAC-SHA1或MD5算法生成签名。
新浪微博:OAuth请求都使用HMAC-SHA1算法生成签名
开心网:签名方法,暂只支持HMAC-SHA1
运行结果
1:client/get_request_token.php 获取Request Token 与 Request Secret
getRequestToken($request_url . '?callback_url=' . $callback_url . '&scope=all');session_start();$_SESSION['oauth_token_secret'] = $tokenInfo['oauth_token_secret'];//此时重定向到服务端授权并显示给用户header('Location: '.$authorize_url.'?oauth_token=' . $token_info['oauth_token']);?>以上代码我们会通过
getRequestToken($request_url . '?callback_url=' . $callback_url . '&scope=all')运行服务端代码
2:server/request_token.php 返回 request_token
通过2中的代码1获取到$oauth_token与$oauth_token_secret与oauth_callback_confirmed
之后重定向到3
3:server/authorize.php
授权验证 此处应该是需要用户输入账号密码之后再回调的我为了代码最基本实现省略了用户之间默认授权
此处校验是简略的 默认已经授权直接获第三方回调地址 (正常情况是用户授权后服务端通过数据库获取第三方回调地址并把 oauth_token授权了 之前oauth_token一直是未授权状态)
上面代码通过回调地址把已经授权的request_token(oauth_token)传到5(4用户授权此处掠过自己可以加个表单提交作为授权验证)
5:client/get_access_token.php 获取access token
setToken($_GET['oauth_token'], $_SESSION['oauth_token_secret']);$tokenInfo = $OAuth->getAccessToken($access_url);var_dump($tokenInfo);
$tokenInfo = $OAuth->getAccessToken($access_url);方法问了66:server/access_token.php 返回access token
2:get_request_token一直到6:server/access_token.php流程获取request_token――》返回request_token――》用户授权校验authorize――》校验成功回调――》获取access token――》返回access token
运行结果如下
一直重定向到get_access_token并获取了access_token与access_secret
现在我们客户端(第三方平台)获取了如下数据$consumer_key :2b4e141bf09beecdeb3479cd106038100febf399
$consumer_secret :fab40ca819c25d5fb4abf3e7cae8da5c25b67d05
$request_token :?程序中间数据(此数据一般是有时效的)$request_secret :?程序中间数据(此数据一般是有时效的)
$access_token :12b6f8f6d6930e0e4d1d024c0f520527d0b84d19 (此数据一般时效为无限长)$access_secret :c77463aff2c1abbd670cfb03df4bb4247910cb78 (此数据一般时效为无限长)
现在我们通过这些参数运行7:get_api.php到8:api.php7:client/get_api.php 获取api用户数据
setToken($access_token, $access_secret);$result = $OAuth->fetch($api_url, array(), OAUTH_HTTP_METHOD_POST);echo $OAuth->getLastResponse();8:server/api.php 返回用户数据
consumer_secret = 'fab40ca819c25d5fb4abf3e7cae8da5c25b67d05'; return OAUTH_OK;}function timestampNonceHandler($Provider) { return OAUTH_OK;}function tokenHandler($Provider) { $Provider->token = '12b6f8f6d6930e0e4d1d024c0f520527d0b84d19'; $Provider->token_secret = 'c77463aff2c1abbd670cfb03df4bb4247910cb78'; return OAUTH_OK;}$OAuthProvider = new OAuthProvider();$OAuthProvider->consumerHandler('consumerHandler');$OAuthProvider->timestampNonceHandler('timestampNonceHandler');$OAuthProvider->tokenHandler('tokenHandler');try { $OAuthProvider->checkOAuthRequest();} catch (Exception $exc) { die(var_dump($exc));}echo 'User Data..';
运行结果下载注:php oauth v1.0 配置 后并开启 php_curl 才能运行此(以上)代码
如何对PHP文件进行加密方法 PHP实现加密的几种方式介绍
php生成圆角图片的方法 电脑中php怎么生成圆角图片教程
用PHP构建一个留言本方法步骤 php怎么实现留言板功能
php中三元运算符用法 php中的三元运算符使用说明
php文件如何怎么打开方式介绍 php文件用什么打开方法
PHP怎么插入数据库方法步骤 php编程怎么导入数据库教程
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
PHP 获取远程文件大小的3种解决方法 如何用PHP获取远程大文件的大小
20个实用PHP实例代码 php接口开发实例代码详细介绍
如何架设PHP服务器方法步骤 怎么搭建php服务器简单教程