при создании сервера для генерации Firebase CustomToken я использую только учетные записи служб или как-то за сценой также учетные данные пользователя? - PullRequest
2 голосов
/ 09 мая 2020

Мы скоро переводим этот проект в производство.

1 - Наше мобильное приложение создаст денежный перевод, разместив его в нашем внутреннем микросервисе. Такой почтовый запрос вернет CustomToken, созданный на нашем внутреннем сервере NodeJs.

2 - Наш внутренний микросервис будет копировать такую ​​передачу в Firestore и соответственно обновлять свое состояние в Firestore.

3 - Вместо нашего опроса приложения Mobil ie или прослушивания нашего внутреннего микросервиса, чтобы получить статус, он будет слушать Firestore для получения статуса из соответствующего документа. Чтобы слушать, он будет использовать CustomToken, возвращенный из сообщения на шаге 1. Наша компания хочет просто воспользоваться функцией базы данных в реальном времени от Google Firestore для этого проекта (реактивный подход).

Видите ли вы какие-либо соображения / проблемы при сравнении того, что я делаю, с этим утверждением: «Google предпочитает в большинстве случаев, чтобы вы разрешали использование учетной записи службы»? (скопировано из другого связанного обсуждения )

CustomToken создается внутри на этом NodeJs сервере и в зависимости от uid, извлеченного из анентифицированного пользователя аутентификации / пользователей из Google Firebase

    const admin = require('firebase-admin');

    exports.serviceAccount = {
      "type": "service_account",
      "project_id": "firetestjimis",
      "private_key_id": "ecfc6 ... fd05923",
      "private_key": "-----BEGIN PRIVATE KEY-----\nMIIE .... 5EKvQ==\n-----END PRIVATE KEY-----\n",
      "client_email": "firebase-adminsdk-fg6p9@firetestjimis.iam.gserviceaccount.com",
      "client_id": "102422819688924138150",
      "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-fg6p9%40firetestjimis.iam.gserviceaccount.com"
    }

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


var uid = "NS .... Ro2"; //copied from https://console.firebase.google.com/project/firetestjimis/authentication/users
var claim = {
  control: true
};
admin.auth().createCustomToken(uid)
  .then(function (customToken) {
    console.log(customToken)
  })
  .catch(function (error) {
    console.log("Error creating custom token:", error);
  });

Наш мобильный телефон (пример в Angular, но такая же идея для IOS и Android) имеет SERVICE_ACCOUNT_JSON_FILE, который я скачал следующим образом:

environment.ts:

export const environment = {
  production: false,
  firebaseConfig: {
    apiKey: "AIzaSy ... 3DCGihK3xs",
    authDomain: "firetestjimis.firebaseapp.com",
    databaseURL: "https://firetestjimis.firebaseio.com",
    projectId: "firetestjimis",
    storageBucket: "firetestjimis.appspot.com",
    messagingSenderId: "795318872350",
    appId: "1:7953 ... 32b26fb53dc810f"
  }
};

app.component.ts

  public transfers: Observable<any[]>;

  transferCollectionRef: AngularFirestoreCollection<any>;

  constructor(public auth: AngularFireAuth, public db: AngularFirestore) {
    this.listenSingleTransferWithToken();
  }

  async listenSingleTransferWithToken() {
    await this.auth.signInWithCustomToken("eyJh ### CUSTOMTOKEN GENERATED FROM INTERNAL NODEJS SERVER ABOVE ### CVg");
    this.transferCollectionRef = this.db.collection<any>('transfer', ref => ref.where("id", "==", "1"));
    this.transfers = this.transferCollectionRef.snapshotChanges().map(actions => {
      return actions.map(action => {
        const data = action.payload.doc.data();
        const id = action.payload.doc.id;
        return { id, ...data };
      });
    });
  }
}

Я понимаю, что создание CustomToken и его использование с нашего мобильного телефона полностью зависят от учетной записи службы. Я прав? Я пропустил какую-то концепцию, и я использую ПОЛЬЗОВАТЕЛЬСКИЕ КРЕДИТЫ за кулисами, и что-то, что правильно работает в среде DEV, может вызвать сюрприз в процессе производства? Очевидно, что для этого вопроса все исходит из моей бесплатной учетной записи, но в производстве это будет платная учетная запись, но код и шаги здесь будут точно такими же.

*** Отредактировано после комментариев Джона

Действительно environment.ts переходит в браузер. Возможно, разработчик Angular, имеющий опыт прослушивания документов Firestore, может прокомментировать, если есть проблема

environment.ts

1 Ответ

1 голос
/ 16 мая 2020

Из того, что я вижу, вы в настоящее время чеканите обычай исключительно на основе учетной записи службы и вашего неявного знания UID пользователя (UID, который вы скопировали с консоли). Насколько я могу судить, нет никаких других учетных данных пользователя, задействованных в коде, которым вы поделились, или в других частях потока.

* 1002 другой веб-клиент от вызова вашего метода listenSingleTransferWithToken или иного чтения токена из базы данных?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...