什么是JWT(JSON Web Token)?如何在PHP中使用它?

JSON Web Token(JWT)是一种用于在各方之间安全传输信息的开放标准(RFC 7519)。它以紧凑且独立的方式在各方之间传输信息,可通过数字签名进行验证,确保信息的完整性和可靠性。JWT 可以在两个系统之间安全地传输声明(JSON 对象),用于身份验证和信息交换。

JWT 由三部分组成,它们使用点号 . 连接在一起:

  1. Header(头部): 包含了标识令牌类型以及所使用的签名算法。例如:

    json 复制代码
    {
      "alg": "HS256",
      "typ": "JWT"
    }
  2. Payload(负载): 包含了声明(claims)。声明是关于实体(通常是用户)和其他数据的声明。例如:

    json 复制代码
    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
  3. Signature(签名): 用于验证头部和负载的完整性。签名由头部、负载和一个密钥组成。例如:

    复制代码
    HMACSHA256(
      base64UrlEncode(header) + "." + base64UrlEncode(payload),
      secret
    )

在 PHP 中,可以使用现有的 JWT 库来处理 JWT。以下是一个使用 Firebase 的 JWT 库的简单示例:

  1. 安装 JWT 库: 使用 Composer 安装 Firebase JWT 库。

    bash 复制代码
    composer require firebase/php-jwt
  2. 创建和验证 JWT:

    php 复制代码
    <?php
    require 'vendor/autoload.php';
    
    use \Firebase\JWT\JWT;
    
    // 生成 JWT
    $key = 'example_key';
    $payload = array(
        "iss" => "http://example.org",
        "aud" => "http://example.com",
        "iat" => time(),
        "nbf" => time() + 60, // 在 60 秒后生效
    );
    
    $jwt = JWT::encode($payload, $key);
    
    // 验证 JWT
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    
    print_r($decoded);

    在上面的示例中,$key 是用于签名和验证的密钥。encode 方法用于生成 JWT,而 decode 方法用于验证和解码 JWT。

请注意,JWT 的安全性取决于密钥的保护,因此密钥的安全存储至关重要。在生产环境中,请妥善保护密钥,以防止未经授权的访问。

相关推荐
一字白首1 分钟前
Vue Router 进阶,声明式 / 编程式导航 + 重定向 + 404 + 路由模式
前端·javascript·vue.js
广州华水科技9 分钟前
单北斗变形监测在水库安全中的应用与维护该如何实施?
前端
catchadmin17 分钟前
告别 Shell 脚本:用 Laravel Envoy 实现干净可复用的部署
php·laravel
GIS好难学20 分钟前
0帧起手《Vue零基础教程》,从前端框架到GIS开发系列课程
前端·vue.js·前端框架
行走的陀螺仪23 分钟前
重绘和重排怎么触发?怎么优化?
前端·css·性能优化·css3·浏览器原理
尘世中一位迷途小书童25 分钟前
项目大扫除神器:Knip —— 将你的代码库“瘦身”到底
前端·架构·代码规范
StarkCoder26 分钟前
🚫求求你别再手动改类名了!Swift 自动混淆脚本上线,4.3 头发保卫战正式开始!
前端
LYFlied31 分钟前
Vue Vapor模式与AI时代前端发展的思考:虚拟DOM与框架的未来
前端·vue.js·人工智能·前端框架
江公望33 分钟前
VUE3 动态Prop 10分钟讲清楚
前端·javascript·vue.js
不会写DN34 分钟前
JavaScript call、apply、bind 方法解析
开发语言·前端·javascript·node.js