一、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...