Отправка в Firestore с использованием пользовательского токена вызвала недействительные учетные данные аутентификации. Ожидается ... действительные учетные данные для аутентификации - PullRequest
0 голосов
/ 21 апреля 2020

Конечная цель: Angular клиент получает токен, действительный в течение одного часа, для запроса данных из FireStore.

Шаги для подтверждения концепции и изучения работы с пользовательскими токенами:

1 - я создал проект в Firebase с помощью инструмента Firebase (https://console.firebase.google.com/project/firetestjimis/overview)

2 - я добавил базу данных Firestore и создал коллекцию. Я выбрал производство вместо теста, потому что этот PO C предназначен из соображений безопасности.

3 - я добавил пользователя вручную в Firebase / Аутентификация / Добавить пользователя

4 - я скопировал UID пользователя сверху добавлен пользователь (используется ниже)

5 - Я создал очень простые приложения Cloud Function для Firebase, чтобы ответить на пользовательский токен. В основном я запустил firebase init и добавил этот код в index.tx

import * as functions from 'firebase-functions';
import * as admin from "firebase-admin";

export const getCustomToken = functions.https.onRequest((request, response) => {
    if (admin.apps.length < 1) {   //Checks if app already initialized
        admin.initializeApp();
    }
    const uid = "UID mentioned above"; 

    admin.auth().createCustomToken(uid)
        .then(function (customToken) {
            console.log(customToken.toString);
            response.send(customToken);
        })
        .catch(function (error) {
            console.log("Error creating custom token:", error);
        });
});

Я достиг этого, выполнив другой ответ stackoverflow

6 - я успешно могу получить пользовательский Токен от https://us-central1-firetestjimis.cloudfunctions.net/getCustomToken

7 - я могу успешно опубликовать этот пользовательский токен на https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken и получить обратно idTken как

{
  "kind": "identitytoolkit#VerifyCustomTokenResponse",
  "idToken": "eyJhbGciOiJSUzI1NiI ... .... aMorw",
  "refreshToken": "AE0u-Ney9OJ04Z3xA7ACsmI1S637hXeuCTEdaEU9cxhhPnlwh-9q0X7QpSxVRIYdTdrTgXUbS9Q6yUdAWVeXzhGMiLLLHtwSWSoVSWnZs3Gp1Sb050tThNPQiSsSss8GkCigft3PTBkY4nIbRy3A5dA8FHCLbMYQSfKYqvu8To76UyMVCYONJOM",
  "expiresIn": "3600",
  "isNewUser": false
}

8 - Теперь я хочу опубликовать простой документ в Firestore throw

curl --location --request POST 'https://firestore.googleapis.com/v1/projects/firetestjimis/databases/(default)/documents/transfer' \
--header 'Authorization: Bearer /eyJhbGc ... ... iNaMorw' \
--header 'Content-Type: application/json' \
--data-raw '{
  "fields": {
    "id": {
      "stringValue": "1"
    },      
    "status": {
      "stringValue": "fracasso"
    }
  }
}'

и получаю эту ошибку:

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

Поэтому мой главный вопрос: разве не возвращен idToken с https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken действительный токен для достижения соответствующего Firestore?

1 Ответ

1 голос
/ 21 апреля 2020

Перед заголовком идентификатора ID в заголовке стоит прямая запись sh, которой быть не должно:

--header 'Authorization: Bearer /eyJhbGc ... ... iNaMorw' \
                                ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...