提问者:小点点

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


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

我已经搜索过了,看来Firebase没有开箱即用的解决方案,使用它的admin sdk来解码自定义令牌(如果我错了,请纠正我)。

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

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

现在的问题是:

  1. 如何最好地在nodejs中解码此令牌?
  2. Firebase的admin sdk是否没有任何内置方法可以直接解码此令牌,就像它能够创建令牌一样?

编辑正如Doug所指出的,我需要解码令牌的原因是获取uid(字符串)和一个附加声明,该声明具有与注册期间设置的postgres用户表相关联的user_id(int)。这些id用于授权某些超文本传输协议请求

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


共2个答案

匿名用户

找到了一个解决方案。我使用了id令牌。在我使用signInWellCustomToken与fire base android sdk登录后,sdk实际上生成了一个id令牌。应该根据超文本传输协议请求将id令牌而不是自定义令牌发送到服务器。通过在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"

}

匿名用户

您与signInWellCustomToken一起使用的令牌仅用于在客户端登录用户。无论身份验证方法如何,ID令牌都保持不变,并且可以通过mUser. getIdToken()方法检索。此后,您可以使用Firebase AdminSDK验证IdToken或使用任何第三方JWT库,以更容易的方式为准。