firebase MISSING_CUSTOM_TOKEN卷曲时出现错误“ https://identitytoolkit.googleapis.com/v1

问题描述 投票:0回答:1

目标:我想学习如何在FireStore中使用自定义标记。

暂定:我尝试遵循firebase curl example by

curl "https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken?key=AIzaSyCO0B7UXo2OcfhXQ2gBxHAPuN5muusiIFw" -H 'Content-Type: application/json' --data-binary '{"token":"123456","returnSecureToken":true}' 

我知道了

{
  "error": {
    "code": 400,
    "message": "MISSING_CUSTOM_TOKEN",
    "errors": [
      {
        "message": "MISSING_CUSTOM_TOKEN",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}
curl: (6) Could not resolve host: application

上面的curl命令用从Firebase /我的项目/常规/ Web Api密钥复制的我的“ Firebase Web API密钥”填充。然后,我添加了一个仅用于测试“ 123456”的令牌。如果我对文档的理解正确,我应该找回令牌。

我的最终目标是向我的Firebase项目添加一个自定义令牌,它允许Angular客户端连接到Firestore并在文档更改时收到通知。

对于创建Custon令牌,我发现的最佳步骤是Stackoverflow Custom Token Question。因此,我尝试使用以下方法创建它:

const admin = require('firebase-admin');
const serviceAccount = require('./angular-firebase-auth0-3c084-firebase-adminsdk-lu97a-6ba2ba41e0.json')

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

var uid = "some-uid";
var claim = {
  control: true
};
admin.auth().createCustomToken(uid, true)
  .then(function (customToken) {
    console.log(customToken)
  })
  .catch(function (error) {
    console.log("Error creating custom token:", error);
  });

angular-firebase-auth0-3c084-firebase-adminsdk-lu97a-6ba2ba41e0.json已从Firebase下载并包含:

{
  "type": "service_account",
  "project_id": "angular-firebase-auth0-3c084",
  "private_key_id": "6ba2ba41e0bf3837841aa9772c7d880b7ce3be81",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAg ...... +n+uYQTJSJPM7Tvgfssa8X1KK09zoj2f7ZLvcjGzl/VF2D7uf23VtAL2RZsB7z14\ny4rnDCc4Rx7nslGUk6kwEz+xJYUpP96rkp5iv/qUuoveJdI/NogJjgUtvRUa2evA\ntg2PV9xsYvkt8+8Ce79fYKA=\n-----END PRIVATE KEY-----\n",
  "client_email": "firebase-adminsdk-lu97a@angular-firebase-auth0-3c084.iam.gserviceaccount.com",
  "client_id": "114324662014690107039",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-lu97a%40angular-firebase-auth0-3c084.iam.gserviceaccount.com"
}

我知道了

C:\WSs\FireStoreDemos\firestore-custom-token>node server
C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\firebase-admin\lib\auth\token-generator.js:205
            throw new error_1.FirebaseAuthError(error_1.AuthClientErrorCode.INVALID_ARGUMENT, errorMessage);
            ^

FirebaseAuthError: `developerClaims` argument must be a valid, non-null object containing the developer claims.
    at FirebaseAuthError.FirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:42:28)
    at FirebaseAuthError.PrefixedFirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:88:28)
    at new FirebaseAuthError (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:147:16)
    at FirebaseTokenGenerator.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\token-generator.js:205:19)
    at Auth.BaseAuth.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\auth.js:94:36)
    at Object.<anonymous> (C:\WSs\FireStoreDemos\firestore-custom-token\server.js:12:14)
[90m    at Module._compile (internal/modules/cjs/loader.js:1147:30)[39m
[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)[39m
[90m    at Module.load (internal/modules/cjs/loader.js:996:32)[39m
[90m    at Function.Module._load (internal/modules/cjs/loader.js:896:14)[39m {
  errorInfo: {
    code: [32m'auth/argument-error'[39m,
    message: [32m'`developerClaims` argument must be a valid, non-null object containing the developer claims.'[39m
  },
  codePrefix: [32m'auth'[39m
}

所以,我的主要问题是:创建上面卷曲的自定义令牌时缺少什么?由于是自定义令牌,至少对于Hello World而言,我可以使用非常简单的令牌,例如“ 123456”,对吧?

在server.js上面的第二个问题,我是否在admin.credential.cert中提供了正确的文件?

node.js firebase firebase-realtime-database google-cloud-firestore
1个回答
0
投票

根据我对Firebase自定义令牌认证的轻描淡写,您无法发送像这样的普通未加密令牌。为了使它起作用,您将必须基于uid生成令牌,该uid可以使用与您已有的代码相同的代码123456

const customToken = await admin.auth().createCustomToken("123456")

然后使用该customToken发出curl命令的测试请求。

对于您的第二个问题,在admin.credential.cert()命令上注入服务帐户是正确的,如果将实际的.json文件与官方Cloud IAM Documentation提供的样本进行比较,则一切似乎都是正确的。

唯一可能引起问题的是,如果您的private_keyprivate_key_id或任何其他需要替换的字段是错误的,那只能由您检查。

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.