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

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

  • application(client) 请求 Service(认证服务器,可能是微信等第三方,也可以是自己的用户验证服务);
  • Service 验证成功返回access_token;
  • application 带着access_token 即可操作相关需授权功能。
laravel|laravel passport 的 oauth2机制(一)-- 安装配置
文章图片

4、oauth2授权模式
  • 授权码模式(微信等第三方多用这个模式)
  • 简化模式
  • 密码模式(自身平台有子系统多用这个模式,下文主要讲这模式)
  • 客户端模式
    laravel|laravel passport 的 oauth2机制(一)-- 安装配置
    文章图片
二、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 服务端认证服务配置
phpartisan passport:client --password
laravel|laravel passport 的 oauth2机制(一)-- 安装配置
文章图片

数据会再新生成记录存放在 oauth_clients表中
【laravel|laravel passport 的 oauth2机制(一)-- 安装配置】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:
laravel|laravel passport 的 oauth2机制(一)-- 安装配置
文章图片

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

    推荐阅读