Аутентификация с помощью firestore для настольного приложения c # - PullRequest
1 голос
/ 18 октября 2019

Я подготовил настольное приложение, которое использует базу данных firestore, и чтобы получить к нему доступ, я использовал GOOGLE_APPLICATION_CREDENTIALS. Согласно документации, я не смог ввести правила для этого типа аутентификации, но я бы хотел это сделать. Я отправил вопрос в службу поддержки, и мне сообщили об использовании REST API. И вот мой вопрос? Можно ли выполнить аутентификацию через REST API, но для чтения и записи данных по-прежнему используется Google.Cloud.Firestore nuget? Как это сделать? Пожалуйста, помните, что у меня есть настольное приложение, написанное на c # WPF. Может быть, вы знаете другое решение моей проблемы?

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Спасибо за отзыв Фрэнк, По вашей ссылке я нашел ответ. Для аутентификации в firestore из настольного приложения вам нужно сделать следующее:

public FirestoreDb CreateFirestoreDbWithEmailAuthentication(string emailAddress, 
string password, string firebaseApiKey, string firebaseProjectId)
{
            // Create a custom authentication mechanism for Email/Password authentication
            // If the authentication is successful, we will get back the current authentication token and the refresh token
            // The authentication expires every hour, so we need to use the obtained refresh token to obtain a new authentication token as the previous one expires
            var authProvider = new FirebaseAuthProvider(new FirebaseConfig(firebaseApiKey));
            var auth = authProvider.SignInWithEmailAndPasswordAsync(emailAddress, password).Result;
            var callCredentials = CallCredentials.FromInterceptor(async (context, metadata) =>
            {
                if (auth.IsExpired()) auth = await auth.GetFreshAuthAsync();
                if (string.IsNullOrEmpty(auth.FirebaseToken)) return;

                metadata.Clear();
                metadata.Add("authorization", $"Bearer {auth.FirebaseToken}");
            });
            var credentials = ChannelCredentials.Create(new SslCredentials(), callCredentials);

            // Create a custom Firestore Client using custom credentials
            var grpcChannel = new Channel("firestore.googleapis.com", credentials);
            var grcpClient = new Firestore.FirestoreClient(grpcChannel);
            var firestoreClient = new FirestoreClientImpl(grcpClient, FirestoreSettings.GetDefault());

            return FirestoreDb.Create(firebaseProjectId, null, firestoreClient);
}

Конечно, сначала вам нужно добавить пользователя электронной почты в консоль firestore.

0 голосов
/ 18 октября 2019

При просмотре репозитория Github для библиотек google-cloud-dotnet кажется, что они всегда используют GOOGLE_APPLICATION_CREDENTIALS для доступа к Firestore.

В этом случае невозможно использовать библиотеку, как в случае с учетными данными аутентификации Firebase. Эти проблемы с репо также, похоже, указывают в этом направлении.

Чтобы получить доступ к Firestore с учетными данными Firebase Authentication, в этом случае вам придется обращаться к нему через REST API.

...