bayfrontmedia/php-jwt

一个用于在PHP中编码和解码JSON Web Tokens (JWT) 的简单库,符合RFC 7519规范。

v2.0.0 2023-01-26 17:16 UTC

This package is auto-updated.

Last update: 2024-08-26 21:12:16 UTC


README

一个用于在PHP中编码和解码JSON Web Tokens (JWT) 的简单库,符合 RFC 7519 规范。

目前,仅支持“HS256”算法。未来版本将计划支持更多算法。

许可证

本项目是开源的,遵循 MIT许可证

作者

Bayfront Media

需求

  • PHP ^8.0
  • JSON PHP 扩展

安装

composer require bayfrontmedia/php-jwt

用法

必须将一个私有的、可重复的密钥传递给构造函数。用于编码JWT的相同密钥也必须用于解码以验证签名。

如果需要,可以使用静态 createSecret() 方法生成一个密码学安全的密钥。

use Bayfront\JWT\Jwt;

$secret = Jwt::createSecret(); // Be sure to save the secret to be used to decode the JWT

$jwt = new Jwt($secret);

公开方法

createSecret

描述

创建一个随机字节的密码学安全的密钥。

注意:密钥应被存储,因为用于编码JWT的相同密钥也必须用于解码。

参数

  • $characters = 32 (int): 字符数

返回值

  • (string)

抛出异常

  • Exception

示例

use Bayfront\JWT\Jwt;

try {
    
    $secret = Jwt::createSecret();
    
} catch (Exception $e) {
    die($e->getMessage());
}

getHeader

描述

返回当前头部数组。

参数

  • None

返回值

  • (array)

示例

print_r($jwt->getHeader());

setHeader

描述

将自定义值设置到当前头部数组。

参数

  • $header (array): 要设置的键/值对

返回值

  • (self)

示例

$header = [
    'cty' => 'custom-content-type;v=1'
];

$jwt->setHeader($header);

removeHeader

描述

如果存在,则删除头部键。

参数

  • $key (string)

返回值

  • (self)

示例

$jwt->removeHeader('cty');

getPayload

描述

返回当前有效负载数组。

参数

  • None

返回值

  • (array)

示例

print_r($jwt->getPayload());

setPayload

描述

将自定义值设置到当前有效负载数组。

参数

  • $payload (array): 要设置的键/值对

返回值

  • (self)

示例

$payload = [
    'user_id' => 10
];

$jwt->setPayload($payload);

removePayload

描述

如果存在,则删除有效负载键。

参数

  • $key (string)

返回值

  • (self)

示例

$jwt->removePayload('user_id');

aud

描述

设置受众。

参数

  • $aud (string)

返回值

  • (self)

exp

描述

设置过期时间。

参数

  • $exp (int)

返回值

  • (self)

iat

描述

设置发行时间。

参数

  • $iat (int)

返回值

  • (self)

iss

描述

设置发行者。

参数

  • $iss (string)

返回值

  • (self)

jti

描述

设置JWT ID。

参数

  • $jti (string)

返回值

  • (self)

nbf

描述

设置不在之前时间。

参数

  • $nbf (int)

返回值

  • (self)

sub

描述

设置主题。

参数

  • $sub (string)

返回值

  • (self)

encode

描述

编码并返回一个签名JWT。

参数

  • $payload = [] (array)

返回值

  • (string)

示例

$now = time();

$token = $jwt->iss('API key whose secret signs the token')
    ->iat($now)    
    ->nbf($now)
    ->exp($now + 86400) // 24 hours
    ->encode([
        'user_id' => 10
    ]);

decode

描述

解码JWT。

此方法验证令牌结构为三个由点分隔的段。

返回的数组将包含 headerpayloadsignature 键。

如果 $validate = true,则还将验证签名和声明。

参数

  • $jwt (string): JWT自身或整个 Authorization 头部都可以使用
  • $validate = true (bool): 验证签名和声明

返回值

  • (array)

抛出异常

  • Bayfront\JWT\TokenException

示例

try {

    $decoded = $jwt->decode('encoded.jwt');

} catch (TokenException $e) {
    die($e->getMessage());
}

validateSignature

描述

验证签名。

参数

  • $jwt (string): JWT自身或整个 Authorization 头部都可以使用

返回值

  • (self)

抛出异常

  • Bayfront\JWT\TokenException

示例

try {

    $decoded = $jwt->validateSignature('encoded.jwt')->decode('encoded.jwt', false);

} catch (TokenException $e) {
    die($e->getMessage());
}

validateClaims

描述

验证存在的声明 "iat"、"nbf" 和 "exp"。

参数

  • $jwt (string): JWT自身或整个 Authorization 头部都可以使用

返回值

  • (self)

抛出异常

  • Bayfront\JWT\TokenException

示例

try {

    $decoded = $jwt->validateClaims('encoded.jwt')->decode('encoded.jwt', false);

} catch (TokenException $e) {
    die($e->getMessage());
}