首頁 後端開發 PHP問題 如何使用PHP實作JWT

如何使用PHP實作JWT

Apr 24, 2023 am 10:50 AM

JWT(JSON Web Tokens)是一種基於JSON的開放標準,用於在兩個應用程式之間安全地傳輸資訊。它由3個部分組成:Header、Payload和Signature。其中Header包含了關於Token的元數據,Payload是實際儲存資訊的部分,Signature則是用來驗證訊息完整性的。

在本文中,我們將探討如何使用PHP實作JWT。

  1. 安裝相依性

JWT需要透過Composer進行安裝。如果您還沒有安裝Composer,可以透過以下命令進行安裝:

curl -sS https://getcomposer.org/installer | php
登入後複製

然後將Composer的可執行檔移到/usr/local/bin目錄中:

sudo mv composer.phar /usr/local/bin/composer
登入後複製

安裝依賴:

composer require firebase/php-jwt
登入後複製
  1. 建立Token

首先,我們需要使用PHP的jwt_encode()函數來建立一個Token。以下是一個範例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$payload = array(
    "iss" => "localhost",
    "aud" => "localhost",
    "iat" => time(),
    "exp" => time()+60*60 //有效期1小时
);

$jwt = JWT::encode($payload, $key);
登入後複製

在上述範例中,我們使用jwt_encode()函數來建立一個JWT。 $key變數包含JWT的金鑰,$payload變數包含了需要傳輸的資訊和過期時間。過期時間可以使用PHP的time()函數來取得。最後,jwt_encode()函數會傳回一個JWT字串。

  1. 驗證Token

我們需要使用PHP的jwt_decode()函數來驗證JWT。下面是一個範例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    print_r($decoded);
} catch (Exception $e) {
    echo 'Invalid token: ' . $e->getMessage();
}
登入後複製

在上述範例中,我們使用了jwt_decode()函數來驗證JWT。如果驗證通過,函數將傳回一個包含了JWT的資訊的物件。

  1. 驗證簽章

簽章用於驗證JWT的完整性。我們需要使用一個金鑰來對訊息進行簽名,而這個金鑰只有簽名驗證機制才知道。當接收者接收到訊息時,他將使用相同的金鑰對這個訊息進行解密和驗證。

JWT使用了一種稱為「雜湊訊息認證碼」(HMAC)的技術來對JWT進行簽署。這個技術需要將JWT的Header和Payload進行雜湊計算,然後再與金鑰組合。接下來是簽章驗證的範例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    $decoded_array = (array) $decoded;
    $signature_valid = JWT::verify("$jwt->header.$jwt->payload", $jwt->signature, $key);

    if ($signature_valid) {
        echo "Valid signature";
    } else {
        echo "Invalid signature";
    }
} catch (Exception $e) {
    echo 'Invalid token: ' . $e->getMessage();
}
登入後複製

在上述範例中,我們使用了verify()函數來驗證簽章。這個函數將會傳回一個布林值,如果結果為true,表示簽名是有效的。

總結

在這篇文章中,我們簡要地介紹如何使用PHP實作JWT。首先,我們需要安裝JWT的依賴函式庫,然後使用jwt_encode()函數建立Token,使用jwt_decode()函數驗證Token,最後使用verify()函數驗證簽名。這些函數都可以透過Firebase的JWT函式庫來實現。

以上是如何使用PHP實作JWT的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)