如何解码使用firebase admin NodeJS sdk生成的自定义令牌



我使用firebase nodejs admin sdk生成一个自定义令牌,稍后发送到android客户端。我已经成功地使用admin.auth().createCustomToken()生成令牌。但是,我需要解码这个令牌以获得生成令牌时设置的uid和其他自定义声明。

我已经搜索过了,似乎firebase没有一个开箱即用的解决方案,使用它的管理sdk来解码自定义令牌(如果我错了,请纠正我)。

我发现的解决方案是使用signInWithCustomToken()首先获得idToken,然后使用firebase的admin sdkverifyIdToken方法获得uid。我对这个解决方案有点怀疑,因为我认为它不能提供对我最初设置的自定义声明的访问。

我发现的另一个解决方案是使用jwtnodejs模块来解码这个令牌。然而,jwt需要一个API密钥来解码这个令牌。不确定API密钥,因为我首先使用了一个服务帐户来生成令牌。

现在的问题是:

  1. 我如何在nodejs中解码这个令牌?
  2. firebase的管理sdk是否没有任何内置的方法来直接解码这个令牌,就像它能够创建令牌一样?

编辑正如Doug指出的那样,我需要解码令牌的原因是为了获得uid(字符串)和一个附加声明,该声明具有与注册期间设置的postgres用户表关联的user_id (int)。这些id用于授权某些http请求

我还碰巧将自定义令牌作为查询参数附加到密码重置链接。因此,我需要解码令牌以知道哪个用户拥有它。

找到修复。我使用了id令牌。在我使用signInWithCustomToken与firebase android sdk登录后,sdk实际上生成了一个id token。在http请求时,应该将id token而不是custom token发送到服务器。通过在firebase admin nodejs环境(在服务器上)中使用admin.auth().verifyIdToken(idToken)方法,我们能够解码令牌以获得最初设置的uid和自定义声明。解码后的令牌如下所示:

{
"is_id_verified": false,
"id": 4,
"iss": "https://securetoken.google.com/my-app-name",
"aud": "my-app-name",
"auth_time": 1628738368,
"user_id": "email@gmail.com",
"sub": "email@gmail.com",
"iat": 1628738369,
"exp": 1628741969,
"firebase": {
"identities": {},
"sign_in_provider": "custom"
},
"uid": "email@gmail.com"

}

signInWithCustomToken一起使用的令牌仅用于在客户端登录用户。无论身份验证方法如何,ID令牌保持不变,可以通过mUser.getIdToken()方法检索。此后,您可以使用Firebase管理SDK来验证idtoken或使用任何第三方JWT库,以更容易的方式。

最新更新