Search code examples
node.jsfirebasetokenjwt

Firebase 3.0 Tokens : [Error: Invalid claim 'kid' in auth header.]


I'm trying to create JWT tokens in node.js for use with the REST api in firebase, but when I try to use them, I get the error "Error: Invalid claim 'kid' in auth header."

This is my code

http.createServer(function (req, res) {
    var payload = {
        uid: "bruh"
    };

    var token = jwt.sign(payload, sact["private_key"], {
        algorithm: 'RS256',
        issuer: sact["client_email"],
        subject: sact["client_email"],
        audience: 'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit',
        expiresIn: '3600s',
        jwtid: sact["private_key_id"],
        header: {
            "kid": sact["private_key_id"]
        }
    });

    res.writeHead(200);
    res.end("It worked. (" + token + ")");
}).listen(port);

These are my requires

var http = require('http');
var jwt = require('jsonwebtoken');

Solution

  • This is an issue because you're generating a Firebase ID token, not an access token for the Firebase REST API.

    To generate a REST API token I would use the legacy Firebase Token Generator library which still works perfectly well (but only generates REST tokens, not general purpose access tokens).

    Note that your Firebase Database secret is now located under the gear icon in the top left of the console.