laravel passport 的 oauth2机制(一)—— 安装配置

一、Oauth2
1、定义:
OAuth 2.0 是一种授权(authorization)机制,主要用来颁发令牌(token)。
2、成员:
Client(客户端)
Service(验证服务器)
3、流程:

  • application(client) 请求 Service(认证服务器,可能是微信等第三方,也可以是自己的用户验证服务);
  • Service 验证成功返回access_token;
  • application 带着access_token 即可操作相关需授权功能。

image.png
4、oauth2授权模式(grant_type)

  • 授权码模式(微信等第三方多用这个模式)
  • 简化模式
  • 密码模式(自身平台有子系统多用这个模式,下文主要讲这模式)
  • 客户端模式
    image.png

二、laravel passport
1、安装
composer require laravel/passport
安装数据表
php artisan migrate
从compoer项目中服务配置文件到config下
php artisan passport:install

添加 Laravel\Passport\HasApiTokens trait 到 App\User 模型

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

配置文件 config/auth.php 中

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

需要在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 方法,该方法将会为颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌注册必要的路由

namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

passport 服务端认证服务配置
php artisan passport:client --password
image.png

数据会再新生成记录存放在 oauth_clients表中

2、客户端请求
代码:

Route::get('/auth/password', function (\Illuminate\Http\Request $request){
    $http = new \GuzzleHttp\Client();

    $response = $http->post('http://http://mypassport.service.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '3',
            'client_secret' => 'Yom4nnZUKVIwYQPOWjnoCh9LHFkZV3pKh83fQe0s',
            'username' => 'aa@qq.com',
            'password' => 'abc123',
            'scope' => '*',
        ],
    ]);

    return json_decode((string)$response->getBody(), true);
});

postman:
image.png

以上就是整个laravel passport oauth2 的安装配置。

总结
1、安装并配置好passport后,用他们指导路由去请求,获取相关access_token;
2、现在这个只是一个简单password模式,里面还有token过期时间、scope的权限验证等都没有列出来。下篇会从源码上写出流程和逻辑。

参考:

https://laravelacademy.org/po...
https://www.ruanyifeng.com/bl...
12 声望
1 粉丝
0 条评论
推荐阅读
flex布局中的flex-basis,flex-grow,flex-shrink到底咋回事儿?
flex布局是非常强大的布局方式,它能轻易完成我们能想到的大部分布局,类似圣杯布局、双飞翼布局等等,它非常灵活,兼容性也很好,在项目中经常被使用到。大多数同学应该都是从阮一峰老师的 这篇博文 了解到flex...

唔系我认叻阅读 680

One 一个简洁的博客、微博客系统
代码:[链接]文档:[链接]系统预览首页:微博列表:微博详细:文章列表:文章详细:归档:搜索,目前只能依据分类、标签搜索😀:管理后台:

Eyeswap45阅读 2.3k评论 1

怎样用 PHP 来实现枚举?
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,...

唯一丶25阅读 6.4k评论 4

PHP转Go实践:xjson解析神器「开源工具集」
我和劲仔都是PHP转Go,身边越来越多做PHP的朋友也逐渐在用Go进行重构,重构过程中,会发现php的json解析操作(系列化与反序列化)是真的香,弱类型语言的各种隐式类型转换,很大程度的减低了程序的复杂度。

王中阳Go10阅读 2k评论 3

封面图
图片防盗链破解 解决图片防盗链问题 反向代理
当客户端(浏览器)向服务器请求内容的时候,会提交一个header,这个header中包含了如:浏览器信息、cookie等内容,那么有一个叫referer的东东,也包含在这里面。

TANKING7阅读 11.3k评论 5

Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2.3k评论 2

封面图
Hyperf 3.0 发布,PHP 新时代
在过去的一年半时间里,Hyperf 2.2 共发布了 35 个小版本,使 Hyperf 达到了一个前所未有的高度,这里也获得了一些不错的数据反馈。

huangzhhui4阅读 1.1k评论 1

封面图
12 声望
1 粉丝
宣传栏