简介
在 Laravel 中,实现基于传统表单的登陆和授权已经非常简单,但是如何满足 API 场景下的授权需求呢?在 API 场景里通常通过令牌来实现用户授权,而非维护请求之间的 Session 状态。现在 Laravel 项目中可以使用 Passport 轻而易举地实现 API 授权过程,通过 Passport 可以在几分钟之内为你的应用程序添加完整的 OAuth2 服务端实现。 Passport 基于League OAuth2 server
实现。
安装
使用 Composer 依赖包管理器安装 Passport :
|
|
接下来,将 Passport 的服务提供者注册到配置文件 config/app.php
的 providers
数组中:
|
|
Passport 使用服务提供者注册内部的数据库迁移脚本目录,所以上一步完成后,你需要更新你的数据库结构。Passport 的迁移脚本会自动创建应用程序需要的客户端数据表和令牌数据表:
|
|
接下来,你需要运行 passport:install
命令来创建生成安全访问令牌时用到的加密密钥,同时,这条命令也会创建「私人访问」客户端和「密码授权」客户端:
|
|
上面命令执行后,请将Laravel\Passport\HasApiTokens
Trait 添加到App\User
模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用域:
|
|
接下来,需要在 AuthServiceProvider
的 boot
方法中调用 Passport::routes
函数。这个函数会注册一些在访问令牌、客户端、私人访问令牌的发放和吊销过程中会用到的必要路由:
|
|
最后,需要将配置文件 config/auth.php
中 api
部分的授权保护项( driver
)改为 passport
。此调整会让你的应用程序在接收到 API 的授权请求时使用 Passport 的 TokenGuard
来处理:
|
|
创建认证方法
官方文档中针对如何简单使用做了初步介绍,下面我试着构造一个完整的客户端授权流程,首先创建ApiController
:
|
|
在ApiController
中引入AuthenticatesUsers
模块,客户端需要通过密码授权的方式来认证,我们需要在ApiController
中重写AuthenticatesUsers
部分功能函数来实现整个完整的授权流程,在这里我们调用Passport提供的oauth/token
接口:
|
|
User.php
模型中定义授权用户名
|
|
创建登录方法
|
|
|
|
创建路由
最后routes/api.php
中加入我们需要的路由:
|
|
测试
postman 中调用接口
通过access_token
获取数据
问题
错误1:
解决:
修改comporse.json
文件
|
|
执行