Home  >  Article  >  Backend Development  >  Let’s talk about how to use JWT for identity authentication in PHP

Let’s talk about how to use JWT for identity authentication in PHP

PHPz
PHPzOriginal
2023-03-31 09:10:171177browse

JWT (JSON Web Token) is an open standard for authentication and authorization. JWT consists of three parts, namely Header, Payload and Signature. When using JWT, the server will send a JWT to the client, and the client will carry the JWT in subsequent requests. The server will confirm the legitimacy of the request by verifying the signature and validity period of the JWT.

PHP is a commonly used Web development language, which provides many JWT implementation methods. The following will introduce how to use JWT for identity authentication in PHP.

  1. Install JWT

Before using JWT, you need to install the PHP JWT package. You can install it through the following command:

composer require firebase/php-jwt

After the installation is completed, you can introduce JWT into the project:

require_once('vendor/autoload.php');
use Firebase\JWT\JWT;
  1. Generate JWT

for identity authentication When doing so, the server needs to generate a JWT and send it to the client. The process of generating JWT includes generating Header, Payload and Signature.

// 将需要编码的数据放到一个关联数组中
$payload = array(
    "user_id" => 123456,
);

// 生成Header
$header = array(
    "alg" => "HS256",  // 采用的加密算法
    "typ" => "JWT"
);

// 生成JWT
$jwt = JWT::encode($payload, SECRET_KEY, 'HS256');
// SECRET_KEY为加密密钥

After generating the JWT, just send it to the client.

  1. Verify JWT

In subsequent requests from the client, the JWT needs to be carried, and the legitimacy of the request must be confirmed through server verification. The process of the server verifying the JWT includes decoding the three parts of Header, Payload and Signature, and verifying whether the Signature is correct and whether the validity period has expired.

// 解码JWT
$jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));

// 验证Signature和有效期
$jwt_verified = JWT::verify($jwt, SECRET_KEY, array('HS256'));

If both the Signature and the validity period pass verification, the request processing can continue. If verification does not pass, the request needs to be rejected.

  1. Handling JWT expiration

JWT has a validity period and can be used for multiple requests during the validity period. After expiration, the client needs to re-obtain the JWT and put it in the request. When processing a JWT, its validity period needs to be checked.

try {
    // 解码JWT
    $jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));
    // 检查有效期
    if ($jwt_decoded->exp < time()) {
        // JWT已过期
        throw new Exception('JWT已过期');
    }
} catch (Exception $e) {
    // JWT无效或已过期
    // 需要重新获取JWT或返回错误
}
  1. Summary

Using JWT for authentication is a simple and effective method. PHP provides many JWT implementations, making it very easy to use JWT in PHP. However, you need to pay attention to the validity period of the JWT and its correct decoding and verification. The above are the steps and precautions for using PHP to implement JWT authentication.

The above is the detailed content of Let’s talk about how to use JWT for identity authentication in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn