2017-05-12 21 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标头属性将告诉您使用什么算法来检查签名。