在Firebase中,如何将自定义声明添加到根节点,而不是“声明”?

时间:2019-11-07 21:17:59

标签: node.js firebase-authentication firebase-admin

在我的云函数中,我需要创建一个自定义令牌并插入一些自定义声明。我是这样的:

     let additionalClaims = {
     'https://hasura.io/jwt/claims': {
       'x-hasura-default-role': 'admin',
       'x-hasura-allowed-roles': ['user', 'admin'],
       }
     }

      admin.auth().createCustomToken(userId,additionalClaims).then(function (customToken) {
       console.log(customToken);
        response.end(JSON.stringify({
          token: customToken
        }))
      })
      .catch(function (error) {
        console.log('Error creating custom token:', error);
      });

添加了Claims,但是将它们放置在“ claims”节点中,如下所示:

     {
      "aud": 
      "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
      "iat": 1573160781,
      "exp": 1573164381,
      "iss": "postgrest-b4c8c@appspot.gserviceaccount.com",
      "sub": "postgrest-b4c8c@appspot.gserviceaccount.com",
      "uid": "mikeuserid",
      "claims": {
           'https://hasura.io/jwt/claims': {
           'x-hasura-default-role': 'admin',
           'x-hasura-allowed-roles': ['user', 'admin'],
          }
         }
       }
      }

但是,我正在调用的API希望它们在根中,如下所示:

                {
      "aud": 
      "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
      "iat": 1573160781,
      "exp": 1573164381,
      "iss": "postgrest-b4c8c@appspot.gserviceaccount.com",
      "sub": "postgrest-b4c8c@appspot.gserviceaccount.com",
      "uid": "mikeuserid",
      "https://hasura.io/jwt/claims": {
      "x-hasura-default-role": "admin",
      "x-hasura-allowed-roles": ["user", "admin"],
          }
       }
      }

如何添加声明,以便将它们添加到根目录中,而不是添加到“声明”下?

仅供参考,如果我已有用户,请使用以下语法 admin.auth()。setCustomUserClaims(customToken,AdditionalClaims)

它正确地将它们添加为root。

1 个答案:

答案 0 :(得分:1)

您不能将声明添加到Firebase自定义令牌的顶层(根)。您也不应将自定义令牌传递给其他API。它们仅应用于从客户端设备启动登录。登录操作将用JWT根上的自定义声明将自定义令牌交换为ID令牌。

使用setCustomUserClaims()添加声明时,通常不会涉及自定义标记。用户从Firebase Auth接收到ID令牌,而自定义声明已在根节点设置。