我正在构建一个应用程序,它将使用Firebase Admin Node.js SDK(https://github.com/firebase/firebase-admin-nodehttps://firebase.google.com/docs/admin/setup)向移动设备发送推送通知 . 出于开发目的,我正在使用我自己的Firebase项目中的服务帐户,但打算允许用户使用他们自己的Firebase项目 .

为此,我可以获取用户的项目ID,客户端电子邮件和私钥,存储它们并在用户想要发送电子邮件时使用它们来初始化Admin对象:

admin.initializeApp({
  credential: admin.credential.cert({
    projectId: "<PROJECT_ID>",
    clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com",
    privateKey:"-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n"
  }),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});

但是我不希望将这些数据保存在我的数据库中,以及让用户更容易对我的应用进行身份验证,因此我正在探索使用Google OAuth2刷新令牌初始化管理对象的可能性:

var refreshToken; // Get refresh token from OAuth2 flow

admin.initializeApp({
  credential: admin.credential.refreshToken(refreshToken),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

我的问题是,使用这种方式我如何配置凭证以使用特定的Firebase项目(例如上面的admin.credential.cert方法中的projectId:“PROJECT_ID”)?

我在admin.credential(https://firebase.google.com/docs/reference/admin/node/admin.credential)的参考文档中看到它表示“刷新令牌凭据不授予对每个管理API的访问权限 . ”是否可以将此流用于Firebase Cloud 消息传递,如果不是,那将是什么推荐的前进方式?