专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

ThinkPHP5中使用 Auth2进行验证的过程分析

来源:小易整编  作者:小易  发布时间:2024-03-21 07:24
摘要:本篇文章给大家分享的内容是关于thinkphp5中使用autb进行验证的过程分析,有需要的朋友可以参考一下,希望能帮助到大家。在tp上实现的autb验证的,在网上发现笔记很少,不像yii,故在此发表一下笔记,用来帮助有相关需求的朋友P...

本篇文章给大家分享的内容是关于thinkphp5中使用 autb进行验证的过程分析,有需要的朋友可以参考一下,希望能帮助到大家。

ThinkPHP5中使用 Auth2进行验证的过程分析

在tp上实现的autb验证的,在网上发现笔记很少, 不像yii, 故在此发表一下笔记,用来帮助有相关需求的朋友

PS: 鉴于oautb有四种方案, 本实例是基于 客户端凭证 实现,其他三种就不讲述了

一、通过composer安装

composer require --prefer-dist bshaffer/oautb-server-php

安装完成后,如图:会出现相关的目录

二、实现授权文件

1) 创建对应的数据表

首先找到 Pdo.php文件,如图:

然后找到该位置

目的,是告诉你创建表时的名称,应该和这里使用的表名称一致

关于创建的表,我直接上代码,方便各位可以直接复制粘贴:

CREATE TABLE oauth_access_tokens (access_token varchar(40) NOT NULL,client_id varchar(80) NOT NULL,user_id int(11) DEFAULT NULL,expires varchar(19) NOT NULL,scope text,  PRIMARY KEY (access_token),  KEY fk_access_token_oautb_client_client_id (client_id),  KEY ix_access_token_expires (expires),  CONSTRAINT fk_access_token_oautb_client_client_id FOREIGN KEY (client_id) REFERENCES pos_oautb_client (client_id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登录后复制
CREATE TABLE oauth_authorization_codes (authorization_code varchar(40) NOT NULL,client_id varchar(80) NOT NULL,user_id int(11) DEFAULT NULL,redirect_uri text NOT NULL,expires int(11) NOT NULL,scope text,  PRIMARY KEY (authorization_code),  KEY fk_authorization_code_oautb_client_client_id (client_id),  KEY ix_authorization_code_expires (expires),  CONSTRAINT fk_authorization_code_oautb_client_client_id FOREIGN KEY (client_id) REFERENCES pos_oautb_client (client_id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登录后复制
CREATE TABLE oauth_clients (client_id varchar(80) NOT NULL,client_secret varchar(80) NOT NULL,redirect_uri text NOT NULL,grant_type text,scope text,created_at int(11) DEFAULT NULL,updated_at int(11) DEFAULT NULL,created_by int(11) DEFAULT NULL,updated_by int(11) DEFAULT NULL,  PRIMARY KEY (client_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登录后复制
CREATE TABLE oauth_refresh_tokens (refresh_token varchar(40) NOT NULL,client_id varchar(80) NOT NULL,user_id int(11) DEFAULT NULL,expires int(11) NOT NULL,scope text,  PRIMARY KEY (refresh_token),  KEY fk_refresh_token_oautb_client_client_id (client_id),  KEY ix_refresh_token_expires (expires),  CONSTRAINT fk_refresh_token_oautb_client_client_id FOREIGN KEY (client_id) REFERENCES pos_oautb_client (client_id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登录后复制
CREATE TABLE oauth_scopes (scope text,is_default tinyint(1) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;
登录后复制

添加一条数据

insert  into oauth_clients(client_id,client_secret,redirect_uri,grant_type,scope,created_at,updated_at,created_by,updated_by) values ('admin','123456','http://','client_credentials',NULL,NULL,NULL,NULL,NULL);
登录后复制

PS,说明一下,如图:

在我实际使用中,只使用到这五张表,也就是上面创建的五张表,在这个config里面,剩下的几个选项我是全部 注销掉了的

另外还有一个情况,说明一下: 有可能各位,对数据表设置了表前缀, 也是需要在此进行相关修改的, 比如我创建的,见图:

所以我进行了相关的修改:

2) 创建授权文件 Oautb.php, 名字随便自己取

登录后复制
/** * @Register new Oautb apply * @param string $action * @return boolean|\OAutb\Server */function grantTypeOautb($action=null){    Config::load(APP_PATH.'database.php');    $storage = new Pdo(        [            'dsn'      => config('dsn'),            'username' => config('username'),            'password' => config('password')        ]    );    $server = new \OAutb\Server($storage, array('enforce_state'=>false));    // Add the "Client Credentials" grant type (it is the simplest of the grant types)    $server->addGrantType(new \OAutb\GrantType\ClientCredentials($storage));    // Add the "Authorization Code" grant type (this is where the oauth magic happens)    $server->addGrantType(new \OAutb\GrantType\AuthorizationCode($storage));    // Add the "User Credentials" grant type (this is where the oauth magic happens)    $server->addGrantType(new \OAutb\GrantType\UserCredentials($storage));    return $server;}/** * @校验token值 * @param unknown $server */protected function checkApiAuthroize($server){    if (!$server->verifyResourceRequest(\OAutb\Request::createFromGlobals())) {        $server->getResponse()->send();        exit;    }}
登录后复制
}?>
登录后复制登录后复制

3) 创建token文件, Access.php

登录后复制
protected  $_server;/** * @授权配置 */public function __construct(){    return $this->_server = $this->grantTypeOautb();}/** * */private function _token(){    // Handle a request for an OAutb.0 Access Token and send the response to the client    $this->_server->handleTokenRequest(\OAutb\Request::createFromGlobals())->send('json', 'oautb_');}/** * @get access_token */public function access_token(){    $this->_token();}
登录后复制
}?>
登录后复制登录后复制

那么如何请求一个access_token的值呢? 直接调用这个 acccess_token()的方法即可

request url: http://restful.thinkphp/r...

还请得之前创建数据表时,有添加了一条新数据吗? 其作用就是相当于用来获取access_token的账号密码之类的, 记得需要使用 Post方式获取token

请求的参数

{client_id=adminclient_secret=123456grant_type=client_credentials //这个参数是固定的}
登录后复制

如果请求成功的话,会返回如下图所示:

贴上,通过ff浏览器httprequest的请求界面:

4) 通过 access_token 获取接口数据 ,Sms.php

_server = $this->grantTypeOautb();}public function test(){    //access_token验证    $this->checkApiAuthroize($this->_server);    echo '成功请求到数据';}}
登录后复制

三、 测试效果如图:

1)首先不带access_token请求, test()方法:

结果出现一个401未验证通过的状态

2)然后请求一个错误的access_token, test()方法

同样是一个401的状态,但此时,如图

有信息返回给我们

3) 最后,使用一个正确的access_token, test()方法

所以,基于第1种情况和第2种情况,你应该自定一个token未验证成功的方法,如图:

完结。

相关文章推荐:

php实现用于验证所有类型的信用卡类

thinkphp验证码的实现(form、ajax实现验证)_php实例

以上就是ThinkPHP5中使用 Autb进行验证的过程分析的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/1151655.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • 如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发随着移动互联网的迅猛发展,移动端应用的开发变得越来越重要。Vue.js作为一款轻量级、高性能的前端框架,被广泛应用于移动端开发中。本文将介绍如何使用Vue技术进行移动端开发,并给出具体的代码示例。一、准备工作...

  • 如何使用PHP中的字符串变量

    如何使用PHP中的字符串变量

    如何使用PHP中的字符串变量在PHP中,字符串变量是一种非常常见的数据类型,用于存储和操作文本数据。在本文中,我们将介绍如何使用PHP中的字符串变量,并提供一些具体的代码示例。字符串变量的声明和赋值在PHP中,要声明一个字符串变量,只需要使...

  • 使用Go语言进行大数据分析的常用技巧

    使用Go语言进行大数据分析的常用技巧

    使用Go语言进行大数据分析的常用技巧随着大数据时代的来临,数据分析成为了各个领域中不可或缺的一环。而Go语言作为一种强大的编程语言,其简洁、高效的特性使得它成为大数据分析的理想选择。本文将介绍一些使用Go语言进行大数据分析常用的技巧,并提供...

  • 如何在Go中使用谷歌云平台?

    如何在Go中使用谷歌云平台?

    谷歌云平台(googlecloudplatform,简称gcp)是由谷歌提供的一套云计算服务平台,包含计算、存储、网络、数据库、人工智能等各种服务。它可以帮助开发人员更快速地开发、测试和部署应用程序,同时还能提供高可用性、高性能和安全性...

  • 怎么查看使用的docker是哪个版本

    怎么查看使用的docker是哪个版本

    可以利用“dockerversion”命令查看docker是那个版本,该命令用于显示docker的版本信息,并且可以通过设置参数为“-f”来指定返回值的模板文件,显示结果中“version”一项的内容就是docker的版本号。本教程操作环...

  • 如何在Vue项目中使用路由实现页面刷新和缓存控制?

    如何在Vue项目中使用路由实现页面刷新和缓存控制?

    如何在vue项目中使用路由实现页面刷新和缓存控制?在Vue项目开发中,使用路由实现页面刷新和缓存控制是非常常见的需求。本文将介绍如何在Vue项目中使用路由来实现页面刷新和缓存控制,并给出相应的代码示例。路由配置首先,在Vue项目中需要使用v...

  • 使用ps编辑后的图片怎么保存

    使用ps编辑后的图片怎么保存

    AdobePhotoshop,简称“PS”,是由AdobeSystems开发和发行的图像处理软件,可以有效地进行图片编辑工作。下面我们来看一下PS保存图片的方法。1、编辑完成后,单击“文件”,点击“存储为”,2、在弹出的对话框中先选...

  • Excel Mid函数的使用方法

    Excel Mid函数的使用方法

    在Excel中,提取指定长度的字符有两个函数,分别为Mid函数和Midb函数,前者用于提取指定长度的字符个数,后者用于提取指定长度的字节个数。用Mid函数提取时,无论是汉字、字母还是数字都算一个字符;用Midb函数提取时,汉字算两个字节...

  • 周排行
  • 月排行
  • 年排行

精彩推荐