Firestore Emulator REST API аутентификация - PullRequest
0 голосов
/ 22 апреля 2020

Я ищу подтверждение ожидаемого поведения способа, которым API-интерфейс REST Firestore Emulator обрабатывает неаутентифицированные запросы, поскольку, как мне кажется, я обнаружил некоторые возможные несоответствия.

Я играл с REST API Firestore Emulator, используя Postman для личного проекта. Если я запускаю эмулятор (firebase emulators:start --only=firestore), я могу успешно выполнить следующие запросы БЕЗ , которым необходимо передать любой токен Bearer в заголовок Authorization с запросом:

  • GET http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/ (возвращает все документы)
  • DELETE http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>/<DOCUMENT_ID> (удаляет отдельный документ)
  • POST http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID> (создает новый документ в коллекции)
  • PATCH http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>/<DOCUMENT_ID> (Обновляет документ)

Однако, когда я пытаюсь получить список идентификаторов коллекции, как описано здесь , используя следующий запрос, я получаю следующую ошибку :

  • POST http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents:listCollectionIds

Ответ:

{
    "error": {
        "code": 403,
        "message": "Metadata operations require admin authentication.",
        "status": "PERMISSION_DENIED"
    }
}

Если я передам токен Bearer, этот запрос будет успешно выполнен. Я сгенерировал токен, используя gcloud auth application-default print-access-token (как описано здесь ).

Обратите внимание, я установил свои правила Firestore, чтобы разрешить все операции чтения и записи для всех документов, чтобы упростить работу сейчас:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true
    }
  }
}

В документах приводятся подробности для аутентификации, однако контекст, в котором они описываются, предназначен для выполнения запросов к https://firestore.googleapis.com/v1/, а не при использовании эмулятора.

Я бы ожидал, что все запросы к API-интерфейсу эмулятора не требуют какой-либо аутентификации, но, похоже, что некоторые делают, а некоторые нет, и я не смог найти в документации другие подробности о том, как должен работать эмулятор .

В настоящий момент я не уверен, является ли это ошибкой, и мне следует сообщить о проблеме на GitHub, или это ожидаемое поведение, и я должен просто передавать токен Bearer с каждым запросом быть в безопасности.

Любая помощь будет оценена. Благодаря.

1 Ответ

0 голосов
/ 23 апреля 2020

Это соответствует поведению реального API. Когда вы отправляете запрос без токена авторизации, вы пытаетесь пройти аутентификацию через систему правил безопасности. Некоторые методы не поддерживают аутентификацию через правила безопасности, потому что вы, вероятно, не захотите, чтобы конечные пользователи вызывали их. В основном это методы администрирования базы данных, поэтому описание ошибки. Например, вы не хотели бы, чтобы конечные пользователи вызывали какие-либо методы индексации.

listCollectionIds является одним из этих административных методов. Именно поэтому эта функция не поддерживается в Интернете, iOS и Android SDK .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...