Использование библиотек Google Firebase Golang (например, IAP и Firestore) для клиентского приложения без прав администратора - PullRequest
0 голосов
/ 28 апреля 2020

Краткое описание

Привет всем,

Я работаю с Golang, занимаюсь разработкой программного обеспечения для локального запуска дома, но также для синхронизации с некоторыми облачными данными (индивидуально защищено для каждого пользователя) , Для этого я решил использовать облачный сервис Google - Firebase (IAP, хостинг, функции и Firestore). Позвольте мне сказать вам, что мне очень нравится разрабатывать и изучать их.

Однако возникает проблема: я действительно запутался с инструментами (библиотеками) Golang, предоставленными Google для работы на их службе. Кажется, они имеют четко определенные библиотеки Golang для работы со своими службами ЕСЛИ ваш код выполняется на доверенной машине, поскольку вам необходимо экспортировать на нее учетные данные.

В моем случае, программное обеспечение, которое я разрабатываю, будет работать на клиентском компьютере, и поэтому мне нужен клиентский логин для IAP и т. д. c. Может кто-нибудь помочь мне с этим?

Проблема

  1. ни один из доступных инструментов, кажется, не определен c для Golang клиента (не-администратора)
  2. Google предоставляет множество, МНОГИЕ репозитории и ссылки на различные инструменты, которые, кажется, делают схожие вещи, какой из них предназначен для использования администратором, какой использует их сервер RP C, какой я мог бы использовать для своего клиента?
  3. У Google очень похожие названия для разных версий одних и тех же вещей ;
  4. Документация не кажется мне достаточно понятной, и если у них есть конкретная c библиотека или нет для моего случая.

Что я достиг

  • Используя REST API, мне удалось получить tokenID (логин) с одной учетной записью пользователя (созданной в моем проекте IAP);
  • С его tokenID мне удалось использовать REST API для получения некоторых документ, к которому у него есть доступ;
  • С помощью следующего кода мне удается использовать одну из Golang библиотек (предположительно для учетных данных администратора) для получения тех же документов с использованием личной учетной записи пользователя IAP моего проекта.
    package main

    import (
        "context"
        "fmt"

        "cloud.google.com/go/firestore"
        "golang.org/x/oauth2"
        "google.golang.org/api/option"
    )

    func main() {
        ctx := context.Background()
        token := oauth2.Token{
            AccessToken:  "TOKEN_ID-FROM-IAP",
            TokenType:    "Bearer",
            RefreshToken: "REFRESH_TOKEN-from-IAP",
        }

        oauthClient := &oauth2.Config{}
        tSource := oauthClient.TokenSource(ctx, &token)

        client, err := firestore.NewClient(ctx, "ProjectID", option.WithTokenSource(tSource))
        if err != nil {
            // TODO: Handle error.
        }
        defer client.Close()

        iter := client.Doc("docPath").Snapshots(ctx)

        defer iter.Stop()
        for {
            docsnap, err := iter.Next()
            if err != nil {
                // TODO: Handle error.
            }

            dataMap := docsnap.Data()
            fmt.Println(dataMap)
        }
    }

Заключительные вопросы

С точки зрения клиента без прав администратора согласно Количество частного проекта Firebase:

  • Кто-нибудь может объяснить / уточнить эти многочисленные библиотеки?
  • Я использовал oauth2 с токеном IAP (приобретенным с помощью REST API), будет ли этот пакет работать нормально с этого момента?
  • Могу ли я использовать пакет oauth2, чтобы больше работать со службой IAP? Мол, обновить токен, сделать логин?

Я ценю мысли и предложения, Заранее спасибо!

...