PHP实现JWT lcobucci/jwt生成jwt token

简介: PHP实现JWT lcobucci/jwt生成jwt token

github: github.com/lcobucci/jw…

1.安装

PHP 5.5+ (v3.2) and PHP 7.1 (v4.x)
OpenSSL Extension
"lcobucci/jwt": "^3.3"
composer require lcobucci/jwt

2. 一些参数说明

iss 【issuer】发布者的url地址
sub 【subject】该JWT所面向的用户,用于处理特定应用,不是常用的字段
aud 【audience】接受者的url地址
exp 【expiration】 该jwt销毁的时间;unix时间戳
nbf 【not before】 该jwt的使用时间不能早于该时间;unix时间戳
iat 【issued at】 该jwt的发布时间;unix 时间戳
jti 【JWT ID】 该jwt的唯一ID编号

3.使用

生成,验证token

namespace App\Common;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use InvalidArgumentException;
class Jwt
{
    //私钥,没有私钥不会认证通过
    private $secret = "OOOO_WWW_EE_N__@server.zhang.com^1#096&24%2020";
    //令牌的过期时间
    private $tokenTtl = 60 * 60 * 2;
    //验证token
    public function checkTokenJWT($token)
    {
        try{
            $signer = new Sha256();
            if (!$token) {
                return false;
            }
            $parser = new Parser();
            $parse = $parser->parse($token);
            ////先验证私钥
            if ($parse->verify($signer, $this->secret) === false) {
                return false;
            } else {
                return [
                    'user_id' => $parse->getClaim("user_id"),
                    'user_name' => $parse->getClaim('user_name')
                ];
            }
        }catch (InvalidArgumentException $e){
            return false;
        }
    }
    //生成token
    public function newTokenJWT($userId)
    {
        $builder = new Builder();
        $signer = new Sha256();
        //发布端url颁发者
        $builder->setIssuer("server.owenzhang.cn");
        //请求端URL访问群体
        $builder->setAudience("owenzhang-user-token");
        //唯一的jwt id作为头项复制
        $builder->setId("fu51server", true);
        //配置颁发令牌的时间
        $builder->setIssuedAt(time());
        //令牌可以使用的时间
        $builder->setNotBefore(time() + 5);
        //令牌的过期时间
        $builder->setExpiration(time() + $this->tokenTtl);
        //配置一个名为“user_id”的新声明
        $builder->set("user_id", $userId);
        //使用“$this->secret”作为密钥创建签名
        $builder->sign($signer, $this->secret);
        //生成的令牌
        $token = $builder->getToken();
        $tokenStr = (string)$token;
        return $tokenStr;
    }
}


目录
相关文章
|
3月前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
80 0
|
3月前
|
存储 NoSQL 前端开发
jwt与redis,把生成的token放入redis中进行临时存储
jwt与redis,把生成的token放入redis中进行临时存储
240 0
|
7天前
|
存储 JSON JavaScript
震撼!Cookie、Session、Token、JWT 终极对决:揭开 Web 认证的神秘面纱!
【8月更文挑战第13天】Web 开发中,Cookie、Session、Token 和 JWT 常混淆。Cookie 是服务器给客户端的小信息片,如登录状态,每次请求都会返回。Session 则是服务器存储的用户数据,通过 Session ID 追踪。Token 类似通行证,证明客户端身份且可加密。JWT 是结构化的 Token,含头部、载荷及签名,确保数据完整性和安全性。
19 4
|
4天前
|
存储 前端开发 JavaScript
2022年超详细的SpringBoot+Vue+Jwt实现token的认证(重点部分讲解和完整的代码设计)
这篇文章详细介绍了使用SpringBoot、Vue.js和Jwt实现token认证的完整流程和代码设计,包括后端的jwt依赖引入、token生成和认证过滤器编写,以及前端的路由守卫、Vuex状态管理和token的存储与使用,确保用户登录状态的维护和验证。
|
4天前
|
存储 开发框架 JSON
ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token
ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token
|
6天前
|
Java Spring
JWT token验证后,通过 ThreadLocal 进行传值
JWT token验证后,通过 ThreadLocal 进行传值
6 0
|
1月前
|
安全 NoSQL Java
JWT和Security 登录权限判断和token访问和让token失效
JWT和Security 登录权限判断和token访问和让token失效
|
3月前
|
JSON 算法 数据安全/隐私保护
聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用
本文介绍了 JSON Web Token (JWT) 和 Python 中的 `jwcrypto` 库。JWT 是一种用于安全传输信息的紧凑型令牌,常用于身份验证。它由 Header、Payload 和 Signature 三部分组成,具有紧凑性、自包含和安全性等特点。`jwcrypto` 库提供了 JWT 的生成、验证、加密、解密及签名功能。通过该库,可以使用 RSA 等算法创建和验证 JWT,同时管理密钥对。安装 `jwcrypto` 可用 `pip install jwcrypto`,并示例展示了如何生成签名 JWT 和密钥对。
聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用
|
3月前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
439 0
|
3月前
|
SQL PHP 数据库
PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)