JWT 之dingo/api

2024-06-12 15:58
文章标签 api jwt dingo

本文主要是介绍JWT 之dingo/api,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JWT (json web token)


dingo/api 以经内置了jwt

基本术语

  • header (头部)

    申明加密算法,JWT最后是通过base64编码
    
  • payload (载荷)

    过期时间,用户数据
    JWT 最后是通过 Base64 编码,可被翻译回原来的样子
    
  • signature (签名)

    由服务器进行的签名,保证了 token 不被篡改。```{"typ":"JWT","alg":"HS256"}{"iss":"http://larbbs.test","iat":1515733500,"exp":1515737100,"nbf":1515733500,"jti":"c3U4VevxG2ZA1qhT","sub":1,"prv":"23bd5c8949f600adb39e701c400872db7a5976f7"}signature
    ```
    

    在dingo中使用jwt

    • auth.php api配置jwt驱动
    • dingo api配置auth项,指向Dingo\Api\Auth\Provider\JWT
    • 安装tymon/jwt-auth

    jwt载荷术语

    • Tymon\JWTAuth\Providers\JWTAuthServiceProvide
    • Tymon\JWTAuth\PayloadFactory JWTFactory 门面
    • 配置

          Secret Key - secretToken time to live - ttlRefresh time to live - refresh_ttlHashing algorithm - algoUser model path - userUser identifier - identifierRequired claims - required_claimsBlacklist enabled - blacklist_enabledProvidersUser - providers.userJWT - providers.jwtAuthentication - providers.authStorage - providers.storage

      payload 说明

      • sub
        Subject 保存token的标识,默认值为user的id
      • iat
        Issued At token发行的unix时间戳
      • exp
        Expiry 过期时间
      • nbf
        Not Before 最早可被使用的token时间点
      • iss
        Issuer 默认请求的url地址
      • jti
        JWT id token的唯一标识,通常由发行时间与sub MD5求值所得
        -aud
        Audience 接收者参数非必选项

    生成token

        // 用户证书(凭证)$credentials = $request->only('email', 'password');$token = JWTAuth::attempt($credentials)// 用户对象$user = User::first();$token = JWTAuth::fromUser($user);// 自定义第二个参数,该参数在解码token时会用到$customClaims = ['foo' => 'bar', 'baz' => 'bob'];JWTAuth::attempt($credentials, $customClaims);// orJWTAuth::fromUser($user, $customClaims);// 自定义token$customClaims = ['foo' => 'bar', 'baz' => 'bob'];$payload = JWTFactory::make($customClaims);$token = JWTAuth::encode($payload);// 支持链式调用$payload = JWTFactory::sub(123)->aud('foo')->foo(['bar' => 'baz'])->make();$token = JWTAuth::encode($payload);
    

    认证(验证)authentication

  • header头内传递token

        ```AuthorizationAuthorization: Bearer {yourtokenhere}```*warning  对于apache而言非base64编码内容会被丢弃,修复如下*```fixRewriteEngine OnRewriteCond %{HTTP:Authorization} ^(.*)RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]```
    2.
    
  • 查询字符串传递

        ```http://api.mysite.com/me?token={yourtokenhere}// 从请求中解析tokenJWTAuth::setToken('foo.bar.baz');$token = JWTAuth::getToken();$user = JWTAuth::parseToken()->authenticate(); ```
    3. 
    
  • 事件

        ```// fired when the token could not be found in the requestEvent::listen('tymon.jwt.absent');// fired when the token has expiredEvent::listen('tymon.jwt.expired');// fired when the token is found to be invalidEvent::listen('tymon.jwt.invalid');// fired if the user could not be found (shouldn't really happen)Event::listen('tymon.jwt.user_not_found');// fired when the token is valid (User is passed along with event)Event::listen('tymon.jwt.valid');```
    
  • 中间件

        - GetUserFromToken  检查header和query字符串,解码,同样事件会被触发- RefreshToken使旧的token无效,并返回下一次响应,仅对当一请求有效- 注册```protected $routeMiddleware = ['jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken','jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken',];```
    

这篇关于JWT 之dingo/api的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054666

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构