Firebase JWT:签名验证失败
问题描述:
我试图对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'));
我错了吗?
答
你不需要$secretKey
或BASE64_DECODE对于这个问题的关键,只是做:
$jwt = \Firebase\JWT\JWT::encode($data, $key, 'HS256');
$decoded = \Firebase\JWT\JWT::decode($jwt, $key, array('HS256'));
嗨,你做一个错字$$关键?它不会工作。 –
我相信你是对的;纠正这一点。 –
顺便提一下,一个问题(可能与这个问题无关,但我请你回答):当令牌过期时,我发送401个状态码/头/令牌中的缺少令牌无效。所以使用我的API的人不知道如何处理这个问题。例如,如果401是由于与标记相关的问题或其他原因而导致他无法区别。我们应该如何处理它? –