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

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

经过前面 OAuth 系列JWT(JSON Web Token) 的铺垫;

终于可以开始本篇 Laravel 教程了;

如果对 OAuth 和 JWT 还不是很了解;

建议先出门左转阅读上面链接中的系列文章;

我们先来回顾一下之前讲的 OAtuh 的四个角色;

  1. 资源服务器(resource server):github 服务器
  2. 授权服务器(authorization server):github 服务器
  3. 资源所有者(resource owner):用户你
  4. 客户端(client):第三方白俊遥博客

资源服务器(resource server)和授权服务器(authorization server)我们统称为 server ;

server 提供 OAuth 的认证服务;

client 则是使用 OAauth 服务;

在 PHP 社区中有一个以开发高质量扩展包著称的组织 league ;

他们提供了两个扩展包 oauth2-serveroauth2-client ;

分别实现了 server 和 client 服务;

Laravel 官方在 oauth2-client 的基础上开发了 socialite 用于实现 OAuth 第三方登录功能;

在 oauth2-server 基础上开发了 Passport 用于实现 OAuth 的认证服务;

Passport 提供了以下功能:

  1. 管理 clients
  2. OAuth 的四种授权类型
  3. 个人访问令牌 (personal access tokens)
  4. 管理令牌作用域 (scope)

铺垫完毕下面正式进入 Passport 环节;

Passport 默认没有安装;

使用前需要先 require 引入包;

composer require laravel/passport

Bash

Copy

运行迁移生成表:

php artisan migrate

Bash

Copy

迁移命令会生成如下表:

表名 作用
oauth_clients 管理 clinet , 对应于前面的例子中的 白俊遥博客
oauth_auth_codes 管理授权码模式 (Authorization Code) 中的 code
oauth_access_tokens 管理用于认证的 access_token
oauth_refresh_tokens 管理用于刷新 access_token 的 refresh_token
oauth_personal_access_clients 用于 personal access token

Passport 提供了 3 个命令;

  1. 生成用于加密的 key
php artisan passport:keys

Bash

Copy

执行后会在 storage 目录下生成 key 文件;

  1. 创建 Client 的命令
php artisan passport:client

Bash

Copy

  1. 生成 key 并创建一个密码类型的 client 和个人令牌

这个命令是组合调用了上面的命令1 + 命令2

php artisan passport:install

Bash

Copy

我们这里执行安装命令:

php artisan passport:install

Bash

Copy

接着需要把 Laravel\Passport\HasApiTokens Trait 添加到 App\User 模型中;

app/User.php

<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
    use Notifiable, HasApiTokens;
    // ...
}

PHP

Copy

AuthServiceProviderboot 方法中调用 Passport::routes() ;

<?php
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();
    }
    // ...
}

PHP

Copy

这一步主要是注册路由的;

我们可以通过 route:list 命令查看注册的路由;


如果我们有需要修改这些方法的时候;

我们可以在 routes/api.php 覆盖这些路由即可;

最后一步配置把 config/auth.php 中 guards 的 api 的 driver 选项改为 passport ;

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

PHP

Copy

Passport 还提供了 vue 前端组件;

php artisan vendor:publish --tag=passport-components

Bash

Copy

在 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

Copy

这里写一个管理 Client 的页面;

routes/web.php

// ...
Route::view('clients', 'clients');

PHP

Copy

resources/views/clients.blade.php

@extends('layouts.app')
@section('content')
    <passport-clients></passport-clients>
@endsection

HTML

Copy

访问 /clients 路由创建测试 Client ;


创建 Client 需要在登录状态下;

这里可以使用 Laravel 的用户认证模块;

php artisan make:auth

Bash

Copy

更多的可以参考之前写的文章 最适合入门的Laravel中级教程(二)用户认证 ;

接下来就是 OAuth 的 4 种类型了;

Passport 的流程都是标准的 OAuth ;

只是有些请求参数会稍微不同;

参考 Laravel 的文档并配合 OAuth 系列 服用应该都可以轻松理解了;

这里就不赘述了;

Passport 的 token 使用的是 JWT 格式;

这个我也提前写文章讲解了 JWT(JSON Web Token) ;

简单提一点的是这个 JWT 中是有一个用户 id 的 ;

如果你的系统中需要加密用户 id 的话;

可以参考我之前的文章 ;

Laravel Passport加密 JWT 格式的access_token中的sub(user_id)字段

除了标准的 OAuth 的 4 种类型;

Passport 还提供了个人访问令牌功能;

如果对 个人访问令牌不了解的话;

我们再次拿出之前举的例子:

OAtuh 的四个角色;

  1. 资源服务器(resource server):github 服务器
  2. 授权服务器(authorization server):github 服务器
  3. 资源所有者(resource owner):用户你
  4. 客户端(client):第三方白俊遥博客

在讲 OAuth 的时候一直都是 github 和白俊遥博客在操作;

那作为资源所有者的你如果也想使用 token 访问你自己的资源;

这时候就可以使个人访问令牌功能了;

个人访问令牌是没有过期时间的;

自然也就没有刷新 token 的功能;

Passport 同样提供了前端组件;

跟之前的管理 Clients 一样;

这里就业不再啰嗦了;


相关文章
|
分布式计算 Java Shell
Spark Shell入门教程(上)
Spark Shell入门教程(上)
1190 0
Spark Shell入门教程(上)
|
14天前
|
安全 数据建模 应用服务中间件
阿里云SSL证书免费版与收费版活动价格及申请教程、部署指南与常见问题解答
阿里云SSL证书新用户免费领取20张DV单域名证书,付费版WoSign DV(域名型)SSL证书年费费用价格254.40元起,Rapid DV(域名型)SSL证书324元起。本文为大家介绍阿里云SSL证书免费版与收费版最新的活动价格以及申请和部署指南与常见问题解答。
288 13
|
6月前
|
人工智能 缓存 Java
用 AI 搭建秒杀平台后端,一周搞定所有功能(附超详细踩坑记录)
本文分享如何借助AI技术快速搭建电商秒杀平台后端。通过飞算JavaAI,从需求分析到代码生成全流程智能化,大幅提高开发效率。文章详细记录了技术栈选择(Java、Spring Boot、MySQL、Redis)、系统架构设计、缓存机制优化、数据一致性保障及测试调优等环节,解决高并发难题,助开发者高效完成秒杀平台构建并规避常见坑点。
|
8月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【卷积层】| CVPR-2021 多样分支块DBB,替换传统下采样Conv 含二次创新C3k2
YOLOv11改进策略【卷积层】| CVPR-2021 多样分支块DBB,替换传统下采样Conv 含二次创新C3k2
312 0
YOLOv11改进策略【卷积层】| CVPR-2021 多样分支块DBB,替换传统下采样Conv 含二次创新C3k2
|
9月前
|
弹性计算 运维 监控
云产品评测|阿里云服务诊断
云服务诊断是阿里云提供的运维工具,帮助用户快速定位和解决云资源问题。通过“健康状态”和“诊断”两大功能,用户可实时查看云资源状态,排查如网站无法访问、ECS故障、配置错误等常见问题,并根据修复建议迅速恢复业务。该工具显著提升了问题解决效率,降低了使用门槛。建议增加自定义告警、多维度数据展示、自动化修复等功能,进一步优化用户体验。
243 0
云产品评测|阿里云服务诊断
|
存储 缓存 NoSQL
深入理解Redis数据类型String原理
本文深入探讨了Redis中String数据类型的实现原理和使用场景,基于Redis 5.0版本进行分析。
深入理解Redis数据类型String原理
|
存储 网络安全 Windows
【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤
【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤
182 0
|
JSON JavaScript 数据格式
postman如何模拟浏览器发送post请求,意思是替代Vue向后端发送一个请求
postman如何模拟浏览器发送post请求,意思是替代Vue向后端发送一个请求
|
前端开发 开发者
【第17期】一文读懂原子 CSS
【第17期】一文读懂原子 CSS
382 0
|
安全
钉钉扫码登录不跳转的情况,可能有以下几种原因:
钉钉扫码登录不跳转的情况,可能有以下几种原因:
1678 3