一、Dinggo Api
-
Dingo Api简介
Dingo Api 为开发者提供了一整套工具一遍帮助使用者轻松、快捷的构件自己的API。这些工具包括:
- 内容协商
- 多认证适配器
- API版本
- 频率限制
- 响应转变和格式化处理
- 错误及异常处理
- 内部请求(内部API请求调用)
- API文档(swagger)
二、jwt认证
1. 简介
在javascript前端技术大行其道的今天,我们通常只需在后台构件 API 提供给前端调用,并且后端仅仅涉及为给前端移动 App 调用。用户认证是 Web 应用的重要组成部分,基于 Api 的用户认证有两个最佳解决方案 – OAuth2.0 (微信授权登录) 和 JWT (JSON WEB TOKEN)
JWT (JSON WEB TOKEN)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息
三、安装Dingo 与 jwt
- 在composer.json文件下的 require 分块下加入如下:
"dingo/api": "^2.0",
"tymon/jwt-auth": "1.0.*@dev"
2.执行命令加载组件
composer update
注意:若 composer update 时无法应,查看 php.ini 配置文件中 php_openssl 是否已经开启
3.在config/app.php下面注册服务提供者及门面(注意jwt跟dingo并不是一定要一起安装)
'providers' => [
Dingo\Api\Provider\LaravelServiceProvider::class,
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
'aliases' => [
'JWTAuth' =>Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory'=>\Tymon\JWTAuth\Facades\JWTFactory::class,
'APIRoute'=>Dingo\Api\Facade\Route::class,
'API'=>\Dingo\Api\Facade\API::class
]
4.生成相应配置文件
// 生成 dingo 的配置文件
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
// 生成 jwt 的配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
//生成所有的服务提供者的配置文件
php artisan vendor:publish
5.生成key - 因为jwt-auth需要这个key值
php artisan jwt:secret
6.配置dingo+JWT-auth
API_STANDARDS_TREE=vnd // 环境
API_PREFIX=api // 前缀
API_VERSION=v1 // 版本
API_DEBUG=true // 调试模式
(配置前四个就好)
API_SUBTYPE=myapp // 子类型
API_DOMAIN=api.myapp.com // 子域名
API_NAME=MY API // 名字(使用API Blueprint命令才会用到)
API_CONDITIONAL_REQUEST=false // 带条件的请求
API_STRICT=false // Strict模式
API_DEFAULT_FORMAT=json // 相应格式
7.dingo 与 jwt 相关联的设置
(1)JWT配置项说明:
tl:token有效期(分钟)refresh_ttl:刷新token时间(分钟)
algo:token签名算法 user:指向User模型的命名空间路径
identifier:用于从token的sub中获取用户
require_claims:必须出现在token的payload中的选项,否则会抛出TokenInvalidException异常
blacklist_enabled:如果该选项被设置为false,那么我们将不能废止token,即使我们刷新了token,前一个token仍然有效
providers:完成各种任务的具体实现,如果需要的话你可以重写他们
User —— providers.user:基于sub获取用户的实现
JWT —— providers.jwt:加密/解密token
Authentication —— providers.auth:通过证书/ID获取认证用户
Storage —— providers.storage:存储token直到它们失效
(2)dingo(api开发) 与 jwt(认证、鉴权) 相关联
Dingo 只是构建 api 的工具,但如果需要授权,要是需要用到 jwt 组件,
修改config/api.php 的 auth 如下:
'auth' => [
'jwt' => function($app){
return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth']);
}
],
(3)路由的使用 - 注册门面
//这里是Dingo自己的路由与laravel路由不冲突
// 从容器当中解析dingo路由
$api = app('Dingo\Api\Routing\Router');
// 使用门面注册路由
APIRoute::version('v1',function($api){
$api->group(['namespace'=>'App\Api\Controllers'],function($api){
$api->resource('/index','AgentFansController');
});
});
// 执行命令查看已经存在哪些路由
php artisan api:routes
注意:若执行 php artisan api:routes 命令出现如下提示:
解决方法:执行命令 composer require dingo/api 更新 Dingo 版本在次执行"php artisan api:routes" 命令即可
四、验证权限
1.为路由群组分配中间件
使用jwt-auth中间件验证Token令牌
2.实现用户注册,通过用户注册返回一个Token
php artisan make:controller App\Api\Controllers\AuthController