【问题标题】:In firebase, how to add custom claims to root node, instead of "claims"?在firebase中,如何将自定义声明添加到根节点,而不是“声明”?
【发布时间】:2020-03-04 12:34:31
【问题描述】:

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

     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);
      });

声明被添加,但它们被放置在一个“声明”节点中,如下所示:

     {
      "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),

它正确地将它们添加到根目录。

【问题讨论】:

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


    【解决方案1】:

    您不能向 Firebase 自定义令牌的顶级(根)添加声明。您也不应该将自定义令牌传递给其他 API。它们只能用于从客户端设备启动登录。登录操作会将自定义令牌交换为带有 JWT 根目录中自定义声明的 ID 令牌。

    当您使用setCustomUserClaims() 添加声明时,(通常)不涉及自定义令牌。用户从 Firebase Auth 收到一个 ID 令牌,其中自定义声明已在根中设置。

    【讨论】:

    • 谢谢,我今天意识到,完全是两个不同的令牌。如果您有一个云功能,假设需要调用第 3 方 API 并在 Authorization 标头中传递 JWT 令牌(带有特定声明),您将如何做到这一点?还是不可能?
    猜你喜欢
    • 2019-03-24
    • 2019-02-26
    • 2020-10-24
    • 1970-01-01
    • 2019-07-02
    • 2018-07-05
    • 2019-03-14
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多