首頁  >  文章  >  後端開發  >  如何使用PHP實作JWT

如何使用PHP實作JWT

PHPz
PHPz原創
2023-04-24 10:50:102702瀏覽

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