Javascript PHP端的JWT
我正在从事一个AngularJS/Phonegap/PHP(Zend)项目 我希望用户通过JWT登录。(这似乎是最好的选择,因为cookies不起作用)。我找到了一个从角度管理它的方法 我在谷歌上搜索了很多次,发现谷歌使用的是这个版本。我还发现了一个基于firebase()的更新版本 (1)我应该使用哪一个 我现在正在使用Luciency,当我通过以下方式创建令牌时:Javascript PHP端的JWT,javascript,php,angularjs,Javascript,Php,Angularjs,我正在从事一个AngularJS/Phonegap/PHP(Zend)项目 我希望用户通过JWT登录。(这似乎是最好的选择,因为cookies不起作用)。我找到了一个从角度管理它的方法 我在谷歌上搜索了很多次,发现谷歌使用的是这个版本。我还发现了一个基于firebase()的更新版本 (1)我应该使用哪一个 我现在正在使用Luciency,当我通过以下方式创建令牌时: $ENV_var = "whatever": $token = encode("id: 5", $ENV_var); 它返回:
$ENV_var = "whatever":
$token = encode("id: 5", $ENV_var);
它返回:eyj0exaiioijkv1qilcjhbgcioijiuzi1nij9.ImlkOiA1Ig.KtG-rolezwidhbmnali1vioczypyum2az1kfieygj7e0
,该值未验证,但如果使用相同的脚本对其进行解码,则有效
(2)这是为什么?这是因为jwt.io
是由Auth0
生成的吗
(3)我也不知道什么时候/为什么我应该使用“符号方法”而不是编码(下面:来自github)
1) 我建议使用firebase实现,因为它维护得更多,并且具有编写器支持
传递到encode
方法中的有效负载应该是一个“声明”数组,参见例如
2) 因为您生成的令牌不是基于数组或包含任何必需的声明
3) 您通常应该使用编码/解码方法,因为它们将在内部调用sign。两者都很好用,但是第二个有更好的文档。我个人更喜欢和你一起工作 你说生成的JWT是无效的。我已经测试了它,它工作正常(它被正确解码),只要确保使用正确的算法“HS256”和你的秘密 公元2年。这个问题不清楚,你能澄清一下吗 公元3年。该类的Encode方法调用sign。你不必自己打电话,只要编码就行了
public static function sign($msg, $key, $method = 'HS256')
{
$methods = array(
'HS256' => 'sha256',
'HS384' => 'sha384',
'HS512' => 'sha512',
);
if (empty($methods[$method])) {
throw new DomainException('Algorithm not supported');
}
return hash_hmac($methods[$method], $msg, $key, true);
}
$payload = array('sub' => 1, 'iss' => 'example.com');
$secret = 'someSecretKey';
$token = JWT::encode($payload, $secret);