【发布时间】:2021-05-06 03:59:17
【问题描述】:
我有一个 PHP 应用程序,我正在尝试生成一个令牌来对用户进行身份验证,以便他们可以从浏览器访问 Firebase。
我已经从 Firebase 控制台中的服务帐户生成了一个私钥,并且我使用了 firebase/php-jwt 库。当尝试从 javascript 使用 signInWithCustomToken 方法访问时,我总是收到错误>
自定义令牌格式不正确。请参阅文档
我生成令牌的代码是:
use Firebase\JWT\JWT;
require_once("php-jwt-master/src/JWT.php");
$service_account_email = "firebase-adminsdk-ierut@......iam.gserviceaccount.com"; // Dots are app name
$key = "-----BEGIN PRIVATE KEY-----\n..........\n-----END PRIVATE KEY-----\n"; // Dots are private key from the downloaded file
$time = time();
$token = array( 'iat' => $time,
'exp' => $time + 3000,
'uid' => '1',
'aud' => 'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit',
'iss' => $service_account_email,
'sub' => $service_account_email
);
$jwt = JWT::encode($token, $key, 'HS256');
javascript代码是:
function login(){
var token = document.getElementById("token").value;
firebase.auth().signInWithCustomToken(token)
.then((user) => {
console.log("Autenticado");
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode + " - " + errorMessage);
});
}
我已经用 jwt.io 工具检查了 jwt,它似乎是正确的。
我不确定密钥格式,我已尝试将标题和“\ n”放在文件中的单行中,也没有“\ n”,并在多行变量中使用“返回”
我也尝试过使用带或不带参数“HS256”的编码功能。但我总是遇到同样的错误。
提前感谢您的任何回复。
【问题讨论】:
-
Google Cloud 不对签名 JWT 使用 HS256。第一步是使用 RS256。
标签: php firebase google-cloud-platform jwt php-jwt