2017-05-12 45 views
0

我已經在php中創建了JWT。我已經找到了從以下鏈接創建JWT的方法。PHP中的反向JWT

JWT (JSON Web Token) in PHP without using 3rd-party library. How to sign?

<?php 
//build the headers 
$headers = ['alg'=>'HS256','typ'=>'JWT']; 
$headers_encoded = base64_encode(json_encode($headers)); 

//build the payload 
$payload = ['sub'=>'1234567890','name'=>'John Doe', 'admin'=>true]; 
$payload_encoded = base64_encode(json_encode($payload)); 

//build the signature 
$key = 'secret'; 
$signature = hash_hmac('SHA256',"$headers_encoded.$payload_encoded",$key,true); 
$signature_encoded = base64_encode($signature); 

//build and return the token 
$token = "$headers_encoded.$payload_encoded.$signature_encoded"; 
echo $token; 
?> 

現在我如何可以驗證它。我從Android發送令牌,但我想驗證這是否是正確的令牌。那麼在完成請求之前,我該如何在代碼中完成呢?

我應該在數據庫中存儲令牌嗎?

是否爲api提供安全性的正確方法?

+0

使用庫。 https://github.com/lcobucci/jwt –

+0

我知道有庫可用,但我想手動執行。我認爲如果jwt令牌生成是可能的,那麼反轉它也是可能的。 https://jwt.io可以完成這項任務。 –

+0

「我想手動完成」 - > http://www.cryptofails.com/post/75204435608/write-crypto-code-dont-publish-it –

回答

0

我強烈建議爲此使用一個衆所周知的JWT庫。這是密碼學,並且滾動你自己的密碼通常是危險的。圍繞安全專業人員進行審查的一些軟件包已被廣泛採用。

如果你要手動做到這一點,至少需要靈感來自於一個這樣的軟件包,以確保你做正確:https://github.com/firebase/php-jwt/blob/master/src/JWT.php#L69-L138

鏈接的代碼是很容易。基本上你:

  1. 通過分裂解碼令牌上.base64_decode ING,然後json_decode ING。
  2. 檢查所提供的JWT的簽名與再次從解碼的頭部和有效負載計算出來的JWT的簽名。示例中的alg標頭屬性將告訴您使用什麼算法來檢查簽名。