热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP的oAuth服务架构

详细的应用场景可以参见百度百科的说明oAuth,本篇文章叙述如何实现oauth服务架构。首先我们从googlecode下载oauth的php开发包点击进入下载页。oauth的协议流程图如下

详细的应用场景可以参见百度百科的说明oAuth,本篇文章叙述如何实现oauth服务架构。首先我们从google code下载oauth的php开发包点击进入下载页。oauth的协议流程图如下:

oauth协议流程图

oauth协议流程图

下载完成之后我们将解压大www目录,目录结构如下图,同时我们需要把oauth-php/library/store/mysql导入到数据库,通过同级目录下的install.php导入(install.php代码需要做修改详细代码见下面php code)。

目录结构

目录结构

其中的myOauthServer自己所创建的文件夹,分别创建以下文件:

文件结构

文件结构

每个文件的代码分别如下

平板视图
打印?
01 //add_server.php
02 include_once'config.inc.php';
03 include_once'../library/OAuthStore.php';
04   
05 $store= OAuthStore::instance('MySQL',$dbOptions);
06   
07 // 当前用户的ID, 必须为整数
08 $user_id= 1;
09   
10 // 服务器描述信息
11 $server=array(
12 'consumer_key'=>'eb4fddcdd368842837a55d9082e652b904f465adb',
13 'consumer_secret'=>'47415be2a343b74f978f3863faa66a56',
14 'server_uri'=>'http://auth.service.com/',
15 'signature_methods'=>array('HMAC-SHA1','PLAINTEXT'),
16 'request_token_uri'=>'http://auth.service.com/request_token.php',
17 'authorize_uri'=>'http://auth.service.com/authorize.php',
18 'access_token_uri'=>'http://auth.service.com/access_token.php'
19 );
20   
21 // 将服务器信息保存在 OAuthStore 中
22 $consumer_key=$store->updateServer($server,$user_id);
平板视图
打印?
01 //authorize.php
02 /*session_start();
03   
04 if (empty($_SESSION['authorized']))
05 {
06 $uri = $_SERVER['REQUEST_URI'];
07 header('Location: /login.php?goto=' . urlencode($uri));
08 exit();
09 }*/
10   
11 include_once'config.inc.php';
12 include_once'../library/OAuthStore.php';
13 include_once'../library/OAuthServer.php';
14   
15 //登陆用户
16 $user_id= 1;
17   
18 // 取得 oauth store 和 oauth server 对象
19 $store= OAuthStore::instance('MySQL',$dbOptions);
20 $server=newOAuthServer();
21   
22 try
23 {
24 // 检查当前请求中是否包含一个合法的请求token
25 // 返回一个数组, 包含consumer key, consumer secret, token, token secret 和 token type.
26 $rs=$server->authorizeVerify();
27 print_r($rs);
28 if($_SERVER['REQUEST_METHOD'] =='POST')
29 {
30 // 判断用户是否点击了 "allow" 按钮(或者你可以自定义为其他标识)
31 $authorized=array_key_exists('allow',$_POST);
32   
33 // 设置token的认证状态(已经被认证或者尚未认证)
34 // 如果存在 oauth_callback 参数, 重定向到客户(消费方)地址
35 $server->authorizeFinish($authorized,$user_id);
36   
37 // 如果没有 oauth_callback 参数, 显示认证结果
38 // ** 你的代码 **
39 echo'Success';
40 }
41 else
42 {
43 echo'Error';
44 }
45 }
46 catch (OAuthException$e)
47 {
48 // 请求中没有包含token, 显示一个使用户可以输入token以进行验证的页面
49 // ** 你的代码 **
50 }
平板视图
打印?
1 //config.inc.php
2 // 数据库连接信息
3 $dbOptiOns=array(
4 'server'=>'localhost',
5 'username'=>'root',
6 'password'=>'admin',
7 'database'=>'oauth'
8 );
平板视图
打印?
01 //index.php
02   
03
04 if(isset($_GET['req']) && ($_GET['req'] == 1)){
05 include_once'config.inc.php';
06 include_once'../library/OAuthStore.php';
07 include_once'../library/OAuthRequester.php';
08   
09 $store= OAuthStore::instance('MySQL',$dbOptions);
10   
11 // 用户Id, 必须为整型
12 $user_id= 1;
13   
14 // 消费者key
15 $consumer_key='eb4fddcdd368842837a55d9082e652b904f465adb';
16   
17 // 从服务器获取未授权的token
18 $token= OAuthRequester::requestRequestToken($consumer_key,$user_id);
19 var_dump($token);
20 die();
21 }
22 else{
23 ?>
24
25
26
27
28
29
30   
31
32

消费放测试页面,点击下面的按钮开始测试

33
34
39
40
41
42 }
43 ?>
平板视图
打印?
01 //oauth_register.php
02 // 当前登录用户
03 $user_id= 1;
04   
05 // 来自用户表单
06 $cOnsumer=array(
07 // 下面两项必填
08 'requester_name'=>'Fising',
09 'requester_email'=>'Fising@admin.com',
10   
11 // 以下均为可选
12 'callback_uri'=>'http://www.demo.com/oauth_callback',
13 'application_uri'=>'http://www.demo.com/',
14 'application_title'=>'Online Printer',
15 'application_descr'=>'Online Print Your Photoes',
16 'application_notes'=>'Online Printer',
17 'application_type'=>'website',
18 'application_commercial'=> 0
19 );
20   
21 include_once'config.inc.php';
22 include_once'../library/OAuthStore.php';
23   
24 // 注册消费方
25 $store= OAuthStore::instance('MySQL',$dbOptions);
26 $key=$store->updateConsumer($consumer,$user_id);
27   
28 // 获取消费方信息
29 $cOnsumer=$store->getConsumer($key,$user_id);
30   
31 // 消费方注册后得到的 App Key 和 App Secret
32 $consumer_id=$consumer['id'];
33 $consumer_key=$consumer['consumer_key'];
34 $consumer_secret=$consumer['consumer_secret'];
35   
36 // 输出给消费方
37 echo'Your App Key: '.$consumer_key;
38 echo'
39 ';
40 echo'Your App Secret: '.$consumer_secret;
平板视图
打印?
01 //request_token.php
02 include_once'config.inc.php';
03 include_once'../library/OAuthStore.php';
04 include_once'../library/OAuthServer.php';
05   
06 $store= OAuthStore::instance('MySQL',$dbOptions);
07   
08 $server=newOAuthServer();
09 $server->requestToken();
10 exit();
平板视图
打印?
01 /**
02 * Installs all tables in the mysql.sql file, using the default mysql connection
03 */
04   
05 /* Change and uncomment this when you need to: */
06   
07 /*
08 mysql_connect('localhost', 'root');
09 if (mysql_errno())
10 {
11 die(' Error '.mysql_errno().': '.mysql_error());
12 }
13 mysql_select_db('test');
14 */
15   
16 $sql=file_get_contents(dirname(__FILE__) .'/mysql.sql');
17 $ps=explode('#--SPLIT--',$sql);
18   
19 foreach($psas$p)
20 {
21 $p= preg_replace('/^\s*#.*$/m','',$p);
22   
23 mysql_query($p);
24 if(mysql_errno())
25 {
26 die(' Error '.mysql_errno().': '.mysql_error());
27 }
28 }


推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 如何在PHPcms网站中添加广告
    本文详细介绍了在PHPcms网站后台添加广告的方法,涵盖多种常见的广告形式,如百度广告和Google广告,并提供了相关设置的步骤。同时,文章还探讨了优化网站流量的SEO策略。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
author-avatar
mobiledu2502858703
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有