oauth2 demo php,OAuth2 基于TP 搭建简单案例

阅读须知:理解OAuth2

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。今天就试着把环境搭建一下在此仅作为学习记录;

参考资料来源:

http://oauth.net/2/

http://bshaffer.github.io/oauth2-server-php-docs/cookbook/

数据表准备:

--

-- 表的结构 `oauth_access_tokens`

--

CREATE TABLE IF NOT EXISTS `oauth_access_tokens` (

`access_token` text,

`client_id` text,

`user_id` text,

`expires` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`scope` text

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--

-- 表的结构 `oauth_authorization_codes`

--

CREATE TABLE IF NOT EXISTS `oauth_authorization_codes` (

`authorization_code` text,

`client_id` text,

`user_id` text,

`redirect_uri` text,

`expires` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`scope` text,

`id_token` text

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--

-- 表的结构 `oauth_clients`

--

CREATE TABLE IF NOT EXISTS `oauth_clients` (

`client_id` text,

`client_secret` text,

`redirect_uri` text

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--

-- 转存表中的数据 `oauth_clients`

--

INSERT INTO `oauth_clients` (`client_id`, `client_secret`, `redirect_uri`) VALUES

('demoapp', 'demopass', 'http://127.0.0.1/tp/index.php');

-- --------------------------------------------------------

--

-- 表的结构 `oauth_public_keys`

--

CREATE TABLE IF NOT EXISTS `oauth_public_keys` (

`client_id` varchar(80) DEFAULT NULL,

`public_key` varchar(8000) DEFAULT NULL,

`private_key` varchar(8000) DEFAULT NULL,

`encryption_algorithm` varchar(80) DEFAULT 'RS256'

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--

-- 表的结构 `oauth_refresh_tokens`

--

CREATE TABLE IF NOT EXISTS `oauth_refresh_tokens` (

`refresh_token` text,

`client_id` text,

`user_id` text,

`expires` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`scope` text

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--

-- 表的结构 `oauth_scopes`

--

CREATE TABLE IF NOT EXISTS `oauth_scopes` (

`scope` text,

`is_default` tinyint(1) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--

-- 表的结构 `oauth_users`

--

CREATE TABLE IF NOT EXISTS `oauth_users` (

`username` varchar(255) NOT NULL,

`password` varchar(2000) DEFAULT NULL,

`first_name` varchar(255) DEFAULT NULL,

`last_name` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--

-- Indexes for table `oauth_users`

--

ALTER TABLE `oauth_users`

ADD PRIMARY KEY (`username`);

OAuth2 库地址:https://github.com/bshaffer/oauth2-server-php

这里我把它放在Vendor/OAuth2里;

授权请求类:

oauth_server->validateAuthorizeRequest($this->oauth_request, $this->oauth_response)) {

$this->oauth_response->send();

die;

}

// print the authorization code if the user has authorized your client

$this->oauth_server->handleAuthorizeRequest($this->oauth_request, $this->oauth_response, true);

// this is only here so that you get to see your code in the cURL request. Otherwise, we'd redirect back to the client

$code = substr($this->oauth_response->getHttpHeader('Location'), strpos($this->oauth_response->getHttpHeader('Location'), 'code=') + 5, 40);

echo json_encode(['code' => $code]);

//$this->oauth_response->send();

}

public function token()

{

$this->oauth_server->handleTokenRequest(\OAuth2\Request::createFromGlobals())->send();

}

}

OAuth2 库的请求封装放在:Org/OAuth2里;

oauth_storage = new \OAuth2\Storage\Pdo(array('dsn' => C('DSN'), 'username' => C('USERNAME'), 'password' => C('PASSWORD')));

// Pass a storage object or array of storage objects to the OAuth2 server class

$this->oauth_server = new \OAuth2\Server($this->oauth_storage);

// Add the "Client Credentials" grant type (it is the simplest of the grant types)

$this->oauth_server->addGrantType(new \OAuth2\GrantType\ClientCredentials($this->oauth_storage));

// Add the "Authorization Code" grant type (this is where the oauth magic happens)

$this->oauth_server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($this->oauth_storage));

$this->oauth_request = \OAuth2\Request::createFromGlobals();

$this->oauth_response = new \OAuth2\Response();

}

}

oauth_server->verifyResourceRequest(\OAuth2\Request::createFromGlobals())) {

$this->oauth_server->getResponse()->send();

die;

}

$this->tokenData = $this->oauth_server->getResourceController()->getToken();

}

}

测试类:

true, 'message' => 'You accessed my APIs!'));

}

public function getToken()

{

echo json_encode(['token' => $this->tokenData]);

}

}

配置文件:

require_once(VENDOR_PATH . '/OAuth2/Autoloader.php');

OAuth2\Autoloader::register();

return array(

//'配置项'=>'配置值'

'AUTOLOAD_NAMESPACE' => array('OAuth2' => VENDOR_PATH . 'OAuth2/'), //扩展模块列表

'DSN' => 'mysql:host=localhost;dbname=oauth2',

'USERNAME' => 'root',

'PASSWORD' => '',

);

以上就介绍了OAuth2 基于TP 搭建简单案例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值