乐趣区

关于php:laravel-passport-的-oauth2机制一-安装配置

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

  • application(client) 申请 Service(认证服务器,可能是微信等第三方,也能够是本人的用户验证服务);
  • Service 验证胜利返回 access_token;
  • application 带着 access_token 即可操作相干需受权性能。


4、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

数据会再新生成记录寄存在 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:

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

总结
1、装置并配置好 passport 后,用他们领导路由去申请,获取相干 access_token;
2、当初这个只是一个简略 password 模式,外面还有 token 过期工夫、scope 的权限验证等都没有列出来。下篇会从源码上写出流程和逻辑。

参考:

https://laravelacademy.org/po…
https://www.ruanyifeng.com/bl…

退出移动版