2016-02-29 330 views
0

我试图对Firebase使用JWT身份验证,但我总是遇到以下错误:“致命错误:未捕获的Firebase \ JWT \ SignatureInvalidException:签名验证失败”。Firebase JWT:签名验证失败

的代码是这样的:

$key = "test"; 

$tokenId = base64_encode(mcrypt_create_iv(32)); 
$issuedAt = time(); 
$notBefore = $issuedAt + 10; 
$expire  = $notBefore + 60; 
$serverName = $_SERVER["SERVER_NAME"]; 


$data = [ 
    'iat' => $issuedAt, 
    'jti' => $tokenId, 
    'iss' => $serverName, 
    'nbf' => $notBefore, 
    'exp' => $expire, 
    "userId" => 1 
]; 


$secretKey = base64_decode($key); 


$jwt = \Firebase\JWT\JWT::encode($data, $secretKey, 'HS256'); 

// and when I decode the tokens, I got that exception 
$decoded = \Firebase\JWT\JWT::decode($jwt, $key, array('HS256')); 

我错了吗?

回答

2

你不需要$secretKey或BASE64_DECODE对于这个问题的关键,只是做:

$jwt = \Firebase\JWT\JWT::encode($data, $key, 'HS256'); 
$decoded = \Firebase\JWT\JWT::decode($jwt, $key, array('HS256')); 
+0

嗨,你做一个错字$$关键?它不会工作。 –

+1

我相信你是对的;纠正这一点。 –

+0

顺便提一下,一个问题(可能与这个问题无关,但我请你回答):当令牌过期时,我发送401个状态码/头/令牌中的缺少令牌无效。所以使用我的API的人不知道如何处理这个问题。例如,如果401是由于与标记相关的问题或其他原因而导致他无法区别。我们应该如何处理它? –