Warning: Use of undefined constant HTTP_USER_AGENT - assumed 'HTTP_USER_AGENT' (this will throw an Error in a future version of PHP) in /www/wwwroot/www.caiwuje.cn/wp-content/themes/seven/header.php on line 1
最适合入门的Laravel中级教程(五)Passport OAuth认证 | 超纯洁博客

最适合入门的Laravel中级教程(五)Passport OAuth认证

经过前面OAuth系列和JWT(JSON Web Token)的
铺垫; 终于可以开始本篇Laravel教程了;
如果对OAuth和JWT还不是很了解;
建议先出门左转阅读上面链接中的系列文章;
我们先来回顾一下之前讲的OAtuh的四个角色;
资源服务器(resource server):github服务器
授权服务器(授权服务器):github服务器
资源所有者(资源所有者):用户你
客户端(客户端):第三方白俊遥博客
资源服务器(资源服务器)和授权服务器(授权服务器)我们统称为服务器;
服务器提供OAuth的认证服务;
客户端则是使用OAauth服务;
在PHP社区中有一个以开发高质量扩展包着称的组织联盟 ;
他们提供了两个扩展包oauth2-server和oauth2-client ;
分别实现了server和client服务;
Laravel官方在oauth2-client的基础上开发了socialite用于实现OAuth第三方登录功能;
在oauth2-server基础上开发了Passport用于实现OAuth的认证服务;
Passport提供了以下功能:
管理客户
OAuth的四种授权类型
个人访问令牌(个人访问令牌)
管理令牌作用域(范围)
铺垫完毕下面正式进入Passport环节;
Passport默认没有安装;
使用前需要先要求引入包;
composer require laravel/passport
巴什复制
运行迁移生成表:
php artisan migrate
巴什复制
迁移命令会生成如下表:
表名 作用
oauth_clients 管理clinet,对应于前面的例子中的白俊遥博客
oauth_auth_codes 管理授权码模式(授权码)中的代码
oauth_access_tokens 管理用于认证的access_token
oauth_refresh_tokens 管理用于刷新access_token的refresh_token
oauth_personal_access_clients 用于个人访问令牌
Passport提供了3个命令;
生成用于加密的关键
php artisan passport:keys
巴什复制
执行后会在storage目录下生成key file;
创建Client的命令
php artisan passport:client
巴什复制
生成key并创建一个密码类型的client和个人令牌
这个命令是组合调用了上面的命令1 +命令2
php artisan passport:install
巴什复制
我们这里执行安装命令:
php artisan passport:install
巴什复制
接着需要把Laravel\Passport\HasApiTokensTrait添加到App\User模型中;
应用程序/ user.php的
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
// ...
}
PHP复制
在AuthServiceProvider的boot方法中调用Passport::routes();
}
// ...
}
PHP复制
这一步主要是注册路由的;
我们可以通过route:list命令查看注册的路由;
如果我们有需要修改这些方法的时候;
我们可以在routes / api.php覆盖这些路由即可;
最后一步配置把config / auth.php中卫的api的驾驶员选项改为护照;
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
PHP复制
Passport还提供了vue前端组件;
php artisan vendor:publish --tag=passport-components
巴什复制
在resources / js / app.js文件中注册组件;
resources / js / app.js
// ...
Vue.component(
'passport-clients',
require('./components/passport/Clients.vue').default
);
Vue.component(
'passport-authorized-clients',
require('./components/passport/AuthorizedClients.vue').default
);
Vue.component(
'passport-personal-access-tokens',
require('./components/passport/PersonalAccessTokens.vue').default
);
// ...
JavaScript的复制
这里写一个管理客户的页面;
routes / web.php
// ...
Route::view('clients', 'clients');
PHP复制
资源/视图/ clients.blade.php
@extends('layouts.app')
@section('content')
@endsection
HTML复制
访问/clients路由创建测试客户;
创建客户需要在登录状态下;
这里可以使用Laravel的用户认证模块;
php artisan make:auth
巴什复制
的更多参考可以写之前的文章最适合入门的Laravel中级教程(二)用户认证 ;
接下来就是OAuth的4种类型了;
Passport的流程都是标准的OAuth;
只是有些请求参数会稍微不同;
参考Laravel的文档并配合OAuth系列服用应该都可以轻松理解了;
这里就不赘述了;
Passport的令牌使用的是JWT格式;
这个我也提前写文章讲解了JWT(JSON Web Token) ;
简单提一点的是这个JWT中是有一个用户id的;
如果你的系统中需要加密用户id的话;
可以参考我之前的文章;
Laravel Passport加密JWT格式的access_token中的sub(user_id)字段
除了标准的OAuth的4种类型;
Passport还提供了个人访问令牌功能;
如果对个人访问令牌不了解的话;
我们再次拿出之前举的例子:
OAtuh的四个角色;
资源服务器(resource server):github服务器
授权服务器(授权服务器):github服务器
资源所有者(资源所有者):用户你
客户端(客户端):第三方白俊遥博客
在讲OAuth的时候一直都是github和白俊遥博客在操作;
那作为资源所有者的你如果也想使用令牌访问你自己的资源;
这时候就可以使个人访问令牌功能了;
个人访问令牌是没有过期时间的;
自然也就没有刷新令牌的功能;
Passport同样提供了前端组件;
跟之前的管理客户一样;
这里就业不再啰嗦了;

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
联系站长
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论