我正在使用jwt-php和firebase-tokengenerator为自定义身份验证流程(https://github.com/firebase/firebase-token-generator-php)创建令牌。
我不断收到invalid_custom_token错误。像这样:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "INVALID_CUSTOM_TOKEN"
}
],
"code": 400,
"message": "INVALID_CUSTOM_TOKEN"
}
}
当我将生成的令牌放入https://jwt.io/时,我会收到无效的签名' UNTIL 我手动更改UID或displayName中的一个字符。
这是生成的令牌,在应用时会失败jwt.io网站和Firebase:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhZG1pbiI6ZmFsc2UsImRlYnVnIjpmYWxzZSwiZCI6eyJ1aWQiOiI2NTQwMDA0NCIsImRpc3BsYXlOYW1lIjoiV2lsbHkgRSBDb3lvdGUifSwidiI6MCwiaWF0IjoxNTE5ODUyNzE1fQ.ScM_nZtwH1zCyiWnPKNi_JLTVwguKibS5z8FLjo6Lco
但如果我改变一个角色,它会突然传递jwt.io.这可能毫无意义,但是在我放弃整个方法并尝试别的东西之前,我在绳索的尽头试图通过这个愚蠢的步骤......
我使用Firebase for Google和username / pw auth,我正在尝试将第三方身份验证系统(LTI)连接到我的项目。
这是php:
$expires = time() + 3600;
$secret = 'XXXX';
try {
$generator = new TokenGenerator($secret);
$token = $generator
// ->setOption('admin', false)
// ->setOption('debug', true)
// ->setOption('expires', $expires)
->setData(array('uid' => '65400044', 'displayName' => 'Willy E Coyote'))
->create();
} catch (TokenException $e) {
echo "Error: " . $e->getMessage();
}
echo $token;
使用令牌的jquery:
success: function(fbToken){
console.log('Response from FB token generator: ') + console.log(fbToken);
console.log('Now try Firebase with token...');
firebase.auth().signInWithCustomToken(fbToken).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log('Errors: ' + error.message);
// ...
});
我也不明白为什么在控制台中有两次对Firebase的调用。第一个不会导致数据但是成功(200个代码)。第二个显示错误和400。
我已经准备好了解IAT的问题......我也想知道我是否已经获得了识别我的Firebase项目的所有必要信息 - php脚本中唯一的数据是Firebase项目秘密。
任何帮助或指示赞赏...
答案 0 :(得分:0)
正如您在对原始帖子的评论中所写的那样,问题在于您使用了一个已弃用的令牌生成器,该生成器仅适用于Firebase已弃用的数据库机密。
使用新的SDK,您必须使用为项目生成的私钥对自定义令牌进行签名,您可以通过从项目设置中的Service Accounts Section下载凭证文件来检索自定义令牌。
如果您不想自己实施流程,我建议您查看https://github.com/kreait/firebase-php,以便您可以像这样工作:
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
$serviceAccount = ServiceAccount::fromJsonFile('/path/to/credentials.json');
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->create();
$uid = 'some-uid';
$additionalClaims = []; // optional
$customToken = $firebase->getAuth()->createCustomToken($uid, $additionalClaims);
您还可以验证客户端应用程序创建的ID令牌等,如https://firebase-php.readthedocs.io/en/latest/
所述免责声明:我创建了库:)。