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

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


终于可以开始本篇 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


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

Passport 的流程都是标准的 OAuth ;

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

这里就不赘述了;

Passport 的 token 使用的是 JWT 格式;

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

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


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

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

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

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

OAtuh 的四个角色;

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

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

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

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

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

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

Passport 同样提供了前端组件;

跟之前的管理 Clients 一样;

这里就业不再啰嗦了;


相关文章
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
808 0
|
机器学习/深度学习 人工智能 算法
AIGC革新商业模式与用户体验
【1月更文挑战第19天】AIGC革新商业模式与用户体验
451 1
AIGC革新商业模式与用户体验
|
6月前
|
Ubuntu 开发工具 C语言
Ubuntu环境下的Samba源码编译
以上就是在Ubuntu环境下编译Samba源码的步骤。希望这个指南能帮助你成功地从源码编译Samba。如果你在编译过程中遇到任何问题,你可以查阅Samba的官方文档,或者在网上搜索相关的教程和解决方案。
200 23
|
XML Java 数据格式
Spring框架入门:IoC与DI
【5月更文挑战第15天】本文介绍了Spring框架的核心特性——IoC(控制反转)和DI(依赖注入)。IoC通过将对象的创建和依赖关系管理交给容器,实现解耦。DI作为IoC的实现方式,允许外部注入依赖对象。文章讨论了过度依赖容器、配置复杂度等常见问题,并提出通过合理划分配置、使用注解简化管理等解决策略。同时,提醒开发者注意过度依赖注入和循环依赖,建议适度使用构造器注入和避免循环引用。通过代码示例展示了注解实现DI和配置类的使用。掌握IoC和DI能提升应用的灵活性和可维护性,实践中的反思和优化至关重要。
670 4
|
11月前
|
监控 API 数据安全/隐私保护
小红书详情API接口的获取与应用
在互联网信息爆炸的时代,小红书凭借丰富的用户生成内容(UGC)和精准的推荐系统迅速崛起,成为重要的社区电商平台。为了帮助开发者高效利用平台数据,小红书开放平台提供了多种API接口,涵盖商品详情和笔记详情等。本文详细介绍了如何注册、申请权限、构建请求、处理响应及应用这些API接口,旨在为开发者提供全面的指南,助力数据驱动的决策与创新。
4654 1
|
11月前
|
JSON 人工智能 自然语言处理
剖析大模型连“Strawberry”的“r”都数不对的原因
本文将从两个常见的大模型翻车问题入手解析这些问题背后体现的大模型技术原理,并解释了为什么会导致这些问题,接着我们利用CoT(思维链)方法解决这些问题并基于上述原理试图剖析CoT方法起作用的可能原因,最后提出【理由先行】风格这一简单有效的Prompt Trick。
1406 36
|
11月前
|
传感器 安全 Java
如何使用 CoAP 协议进行设备通信
CoAP(Constrained Application Protocol)是一种适用于资源受限设备的轻量级协议,常用于物联网(IoT)设备之间的通信。本文介绍如何使用 CoAP 协议进行设备通信,包括协议的基本概念、消息格式、请求与响应流程以及实际应用示例。
1490 3
|
缓存 算法 架构师
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
资深架构师尼恩在其读者交流群中分享了关于分布式ID系统的设计与实现,特别是针对高并发场景下的解决方案。他强调了分布式ID系统在高并发核心组件中的重要性,并详细介绍了百度的UidGenerator,这是一个基于Snowflake算法改进的Java实现,旨在解决分布式系统中的唯一ID生成问题。UidGenerator通过自定义workerId位数和初始化策略,支持虚拟化环境下的实例自动重启和漂移,其单机QPS可达600万。此外尼恩的技术分享不仅有助于提升面试表现,还能帮助开发者在实际项目中应对高并发挑战。
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
|
SQL XML Java
MyBatis动态SQL------------------choose用法
MyBatis动态SQL------------------choose用法
225 1
|
机器学习/深度学习 自然语言处理 搜索推荐
大模型技术在C端市场的三大应用场景
【1月更文挑战第15天】大模型技术在C端市场的三大应用场景
1083 2
大模型技术在C端市场的三大应用场景