发表时间:2015-05-27来源:网络
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 才能运行此(以上)代码
CI框架连接数据库配置操作以及多数据库操作
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
C语言关键字及其解释介绍 C语言32个关键字详解
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
PHP中的(++i)前缀自增 和 (i++)后缀自增
将视频设置为Android手机开机动画的教程
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
常用dos命令及语法
PHP中include和require区别之我见
国家政务服务平台官方版下载v2.1.8 安卓版
88.71MB |生活服务
HLA运动健康下载v1.0.3 最新版
262.61MB |生活服务
Kukukao下载v1.0.2 最新版
33.42MB |学习教育
33上门按摩官方版下载v3.2.7 安卓版
33.59MB |生活服务
33上门app(改名33上门按摩)下载v3.2.7安卓官方版
33.59MB |生活服务
好到达货车导航app下载v2.2.5.2 安卓版
59.27MB |旅游出行
南昌掌上城管app下载v1.2.34 安卓版
55.49MB |生活服务
芯兴遥控下载v1.0.6 最新版
59.4MB |系统工具
2014-09-05
2022-03-20
2022-03-21
2022-03-24
2014-09-05
2014-09-05
2015-07-05
2014-09-05
2022-03-21
2014-09-05