今天我們要介紹的是php jwt包。
什么是jwt呢?它的全稱是 JSON Web Token(JSON網頁令牌),用于表示加密的JSON對象,可用于身份驗證和聲明。在實踐中,它使用了使用HMAC簽名或RSA/ECDSA密鑰對的JWT構建安全的用戶身份驗證和授權。
這些話聽上去可能比較抽象,我們來看一個具體的例子:
$header = array( "alg" =>"HS256", "typ" =>"jwt" ); $payload = array( "iss" =>"example.com", "aud" =>"example.com", "exp" =>time() + 3600, "sub" =>"12345", "name" =>"John Doe", "roles" =>array("admin", "user"), ); $JWT = JWT::encode($payload, "secret", "HS256", $header);
這段代碼中的$payload就是jwt中的payload,包含了一些具體的信息,比如這個例子中的發行者、接收者、過期時間、主題和角色等。JWT::encode()函數將這些信息和一些其它的元信息(比如加密方式)一起編碼成一個加密的字符串$JWT。在后續的身份驗證中,服務器只需匹配客戶端發送的JWT即可確定其身份。
那么php jwt包的功能是什么呢?它提供了一個類庫,可以方便地使用HMAC和RSA密鑰對對JWT進行簽名和驗證。它不僅可以生成JWT,還可以將原始的PHP數組轉化成JWT,并解碼并驗證接收到的JWT。
下面是使用php jwt包的一個例子:
use \Firebase\JWT\JWT; class User { public $id; public $name; public function __construct($id, $name) { $this->id = $id; $this->name = $name; } public function getToken() { $payload = array( "iss" =>"example.com", "aud" =>"example.com", "exp" =>time() + 3600, "sub" =>$this->id, "name" =>$this->name, "roles" =>array("user") ); return JWT::encode($payload, "secret"); } public static function verifyToken($token) { $decoded = JWT::decode($token, "secret", array('HS256')); $decoded_array = (array) $decoded; return $decoded_array; } } $user = new User(12345, "John Doe"); $token = $user->getToken(); $decoded_token = User::verifyToken($token);
這個例子定義了一個User類,它有一個getToken()方法,用于生成JWT,并將其返回。verifyToken()方法用于驗證接收到的JWT,并將解碼后的數組返回。
這些例子只是php jwt包的冰山一角,它支持多種加密算法、自定義元信息、多種驗證方式等等。如果你在開發一個需要身份驗證的系統,使用php jwt包將是一個不錯的選擇。
上一篇php key val
下一篇ajax傳遞的參數是對象