JWT(JSON Web Tokens)是一種基於JSON的開放標準,用於在兩個應用程式之間安全地傳輸資訊。它由3個部分組成:Header、Payload和Signature。其中Header包含了關於Token的元數據,Payload是實際儲存資訊的部分,Signature則是用來驗證訊息完整性的。
在本文中,我們將探討如何使用PHP實作JWT。
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
首先,我們需要使用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字串。
我們需要使用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的資訊的物件。
簽章用於驗證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中文網其他相關文章!