是否仍然可以在Firebase 3中对令牌进行服务器端验证?
我们使用现有的身份验证系统(使用服务帐户)在运行Golang的服务器上生成自定义令牌(JWT).令牌在iOS客户端上使用
FIRAuth.auth()?.signInWithCustomToken(customToken)
Run Code Online (Sandbox Code Playgroud)
直到那里一切正常.但是当我们将客户端令牌传递给从以下位置检索的服务器时
FIRUser.getTokenWithCompletion({ token, error in ..})
Run Code Online (Sandbox Code Playgroud)
我们无法验证它.JWT令牌使用RS256签名,并且有一个我们无法识别的header.kid.服务帐户(用于签署自定义令牌)的公钥不验证客户端令牌.验证客户端令牌是否需要公钥?
我知道可以使用Java或Javascript中的"verifyIdToken"调用来验证客户端令牌,但我们希望能够使用标准JWT库在Golang中执行此操作.
这一切在Firebase 2中运行良好(使用HS256和Firebase秘密).
我有一个只有PHP(没有Java,没有node.js)的共享主机方案.我需要从我的Android应用程序发送firebase ID令牌并通过PHP-JWT验证它.
我正在按照教程:验证Firebase ID令牌
它说:
"如果您的后端使用的语言没有官方的Firebase Admin SDK,您仍然可以验证ID令牌.首先,找到适合您语言的第三方JWT库.然后,验证标题,有效负载和签名ID令牌."
我找到了这个库:Firebase-PHP-JWT.在gitHub示例中; 我无法理解
$关键部分:
`$key = "example_key";`
Run Code Online (Sandbox Code Playgroud)
和
$ token部分:
`$token = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);`
Run Code Online (Sandbox Code Playgroud)
我的问题:
编辑:
哦,我明白了.GitHub示例演示了如何生成JWT代码(编码)以及如何解码它.在我的情况下,我只需要解码由firebase编码的jwt.所以,我只需要使用这个代码:
$decoded = JWT::decode($jwt, $key, array('HS256'));
Run Code Online (Sandbox Code Playgroud)
在此代码部分中,$ jwt是firebase ID令牌.对于$ key变量文档说:
最后,确保ID令牌由与令牌的孩子声明相对应的私钥签名.从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com获取公钥,并使用JWT库验证签名.使用来自该端点的响应的Cache-Control标头中的max-age值来了解何时刷新公钥.
我不明白如何将这个公钥传递给解码功能.键是这样的:
"----- BEGIN CERTIFICATE ----- \nMIIDHDCCAgSgAwIBAgIIZ36AHgMyvnQwDQYJKoZIhvcNAQEFBQAwMTEvMC0GA1UE \nAxMmc2VjdXJldG9rZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wHhcNMTcw \nMjA4MDA0NTI2WhcNMTcwMjExMDExNTI2WjAxMS8wLQYDVQQDEyZzZWN1cmV0b2tl \nbi5zeXN0ZW0uZ3NlcnZpY2VhY2NvdW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD \nggEPADCCAQoCggEBANBNTpiQplOYizNeLbs + r941T392wiuMWr1gSJEVykFyj7fe \nCCIhS/zrmG9jxVMK905KwceO/FNB4SK + l8GYLb559xZeJ6MFJ7QmRfL7Fjkq7GHS\N0/sOFpjX7vfKjxH5oT65Fb1 + …