fachsimpeln/easyjwt

JWT标准(JSON Web Tokens)的简单易用实现

2.0.0 2020-04-19 16:58 UTC

This package is auto-updated.

Last update: 2024-09-20 03:18:12 UTC


README

JWT标准(JSON Web Tokens)的简单易用实现

什么是JWT?

JSON Web Token (JWT [...]) 是一种基于JSON的访问令牌互联网标准。[...] 例如,服务器可以生成一个具有“已登录为管理员”声明的令牌并将其提供给客户端。客户端可以使用该令牌来证明它已登录为管理员。这些令牌可以由一方的私钥(通常是服务器)签名,以便该方可以随后验证令牌的有效性。如果另一方通过某些合适且可信的手段拥有相应的公钥,他们也可以验证令牌的合法性。这些令牌旨在紧凑、URL安全,特别适用于网页浏览器单点登录(SSO)环境。JWT声明通常用于在身份提供者和服务提供者之间传递已验证用户的身份,或根据业务流程需求传递任何其他类型的声明。

~ 来自 维基百科

为什么选择EasyJWT?

EasyJWT旨在提供一种特别容易实现的JWT版本。到目前为止,只使用了易于理解的对称签名方法。

该库还支持使用AES(通过openssl)对JWT令牌进行对称加密,如果需要在JWT中存储机密或敏感信息。

PHP Packagist Packagist

CodeFactor License

通过Composer安装

composer require fachsimpeln/easyjwt

不使用Composer安装

  1. 克隆此仓库
  2. 包含 ./lib/JWT.inc.php
require __DIR__ . '/lib/JWT.inc.php';

文档

使用文档可以在 Wiki 中找到。代码文档可以在 docs/ 中找到

支持的算法

示例代码

创建新的JWT

// Sample array
$sample_array = array();
$sample_array['id'] = '0';
$sample_array['name'] = 'fachsimpeln';

// Reserved claims
$jwt_r_claims = new EasyJWT\JWTReservedClaims();

// Expire in 30 seconds
$jwt_r_claims->SetClaim('EXP', time() + 30);
// Be valid in 5 seconds, not immediately
$jwt_r_claims->SetClaim('NBF', time() + 5);

/* To overwrite an automatically set reserved claim
     $jwt_r_claims->SetClaim('ISS', 'localhost');
*/


// Options for the JWT (method)
$jwt_options = new EasyJWT\JWTOptions('HS512', $jwt_r_claims, true);

// Set data to JWTData object
$jwt_data = new EasyJWT\JWTData($sample_array, $jwt_options);
     /*
          For encryption:
          $jwt_data = new EasyJWT\JWTDataEncrypted($sample_array, $jwt_options);
     */

// Create new JWT object to interact with JWT
$jwt = new EasyJWT\JWT($jwt_data);

// Send the JWT as a cookie to the user's browser
$jwt->SetJWT(); // $jwt->toString();

从cookies中读取JWT

// Read directly from cookie
$jwt_data = new EasyJWT\JWTData();
     /*
          Read from string ($value)
          $jwt_data = new EasyJWT\JWTData($value);


          For encryption:
          $jwt_data = new EasyJWT\JWTDataEncrypted();
          or
          $jwt_data = new EasyJWT\JWTDataEncrypted($enc_value);
     */

// Create new JWT object to validate signature, validate reserved claims and interact with JWT
$jwt = new EasyJWT\JWT($jwt_data);

// Check success (returns false when anything is invalid)
if ($jwt->IsValid()) {
     print 'Valid!<br>';
} else {
     print 'Invalid!';
     die();
}

// Read main content (body) as array from JWT
     // Returns null on error
$sample_array = $jwt->GetData(); // $jwt->GetJWT(); $jwt->d();

// Show the contents of the JWT
var_dump($sample_array);

更多

这些示例也可以在 sample/ 文件夹中找到