热门标签 | 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 }


推荐阅读
  • 2023年最佳PHP开发学习路径推荐
    本文详细探讨了针对不同背景的学习者如何选择最适合自己的PHP开发学习资源,包括书籍、在线课程及培训机构的推荐。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 本文详细介绍了如何使用 PHP 编程语言输出 99 乘法表,包括使用不同的循环结构如 do-while、for 循环等方法,并提供了具体的代码示例。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • 深入解析SSL Strip攻击机制
    本文详细介绍了SSL Strip(一种网络攻击形式)的工作原理及其对网络安全的影响。通过分析SSL与HTTPS的基本概念,探讨了SSL Strip如何利用某些网站的安全配置不足,实现中间人攻击,以及如何防范此类攻击。 ... [详细]
  • APM(Application Performance Management,应用性能管理)对于提供互联网服务的企业至关重要。本文将深入探讨APM如何帮助识别和解决导致用户流失的技术问题,以及它在提升整体用户体验方面的作用。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文总结了MySQL的一些实用技巧,包括查询版本、修改字段属性、添加自动增长字段、备份与恢复数据库等操作,并提供了一些常见的SQL语句示例。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • CentOS 转向引发争议,联合创始人推出 Rocky Linux
    CentOS 转向 CentOS Stream 引发用户不满,其联合创始人 Gregory Kurtzer 推出新的社区项目 Rocky Linux,旨在延续 CentOS 的精神。 ... [详细]
  • 本章探讨了使用固定数组实现栈和队列的基本方法,以及如何通过这些基本结构来实现更复杂的操作,如获取栈中的最小值。此外,还介绍了如何利用栈来模拟队列的行为,反之亦然。 ... [详细]
  • 本文介绍了如何在 GitHub 的 Markdown 文件中正确显示数学公式的方法,适用于非博客环境。 ... [详细]
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社区 版权所有