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
- 建立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字串。
- 驗證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的資訊的物件。
- 驗證簽章
簽章用於驗證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中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版