Как аутентифицировать вызов отдыха в firebase?

Я хочу сделать повторный вызов некоторых данных, защищенных некоторым правилом, с помощью моего пользователя, поэтому мне нужно иметь токен для моего запроса. в зависимости от того, какая версия документации по firebase существует по-разному: старый и устаревший способ (https://www.firebase.com/docs/rest/api/):

'https://samplechat.firebaseio-demo.com/users/jack/name.json?auth=<TOKEN>'

новый способ и я цитирую документ (https://firebase.google.com/docs/reference/rest/database/user-auth#section-get):

Использование токена доступа API REST базы данных будет принимать access_token = в строке запроса или заголовке Authenticate: Bearer для аутентификации запроса с учетной записью службы.

'https://samplechat.firebaseio-demo.com/users/jack/name.json?access_token=<TOKEN>'

новый способ не работает для меня, даже если я использовал новую консоль firebase, когда я ее установил, и даже если токен, который я использую, сгенерирован с использованием нового Firebase sdk. Кто-нибудь знает, почему работает только устаревший способ? Мне было интересно помещать токен в заголовок моих запросов, но не могу сделать.

Ответы

Ответ 1

Вам нужно поставить access_token в заголовки.

Название заголовка: авторизация

Содержимое заголовка: Bearer the_token

Чтобы попробовать и поместить некоторые заголовки, вы можете использовать некоторые инструменты, такие как почтальон для Google Chrome или другие инструменты.

Ответ 2

Для java: Я попытался использовать auth для доступа к DatabaseRealtime. Выполнить:

curl 'https://PROJECT_ID.firebaseio.com/users.json?auth=DATABASE_SECRET'

Он работал, но этот способ устарел.
После этого я попытался использовать access_token Я встретил проблему при использовании access_token для запроса базы данных в моем проекте firebase. Я уже выяснил основную причину ошибок, которые я встречал раньше. Потому что я создал access_token неправильно. Я исправлял шаги как ниже:

1. добавить google-api-client в pom.xml

<dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.22.0</version>
    </dependency>

2. Получить токен

 public static void main(String[] args) throws Exception {
           GoogleCredential googleCred = GoogleCredential.fromStream(new 
           FileInputStream("C://realtime.json"));
           GoogleCredential scoped = googleCred.createScoped(
                         Arrays.asList(
       // or use firebase.database.readonly for read-only access
           "https://www.googleapis.com/auth/firebase.database",                           
    "https://www.googleapis.com/auth/userinfo.email"
                          )
                  );
                  scoped.refreshToken();
                  String token = scoped.getAccessToken();
                  System.out.println(token);
              }

3. попытайтесь получить доступ к базе данных Скопируйте приведенное выше значение
Запустить завиток:

curl 'https://PROJECT_ID.firebaseio.com/users.json?access_token=TOKEN'

Это сработало хорошо.

Для получения дополнительной информации обратитесь к ссылке: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get

Ответ 3

У меня была та же проблема. Только добавление маркера в заголовок авторизации не сработало, но старый способ включения "auth =" в запросе работал. Я думаю, что это может быть ошибка в Firebase.

Мое решение - использовать как новый способ, так и старый способ, например, "auth =" в запросе, а также токен в заголовке авторизации. Поэтому после устранения проблемы ваше приложение будет продолжать работать.

Btw эти ответы о правилах неверны, если проблема вызвана правилами, ошибка будет 401 неавторизованной, а не 403 с сообщением "разрешение отказано"

Ответ 4

Вот так:

 try (InputStream is = new ClassPathResource("your-admin-info.json").getInputStream()) {

      GoogleCredential googleCred = GoogleCredential.fromStream(is);
      scoped = googleCred.createScoped(
          Arrays.asList(
              "https://www.googleapis.com/auth/firebase.database",
              "https://www.googleapis.com/auth/userinfo.email"
          )
      );
      scoped.refreshToken();
      scoped.getAccessToken();

your-admin-info.json - это информация учетной записи Service Admin, которую вы можете создавать на своих учетных записях

Ответ 5

Вам нужно проверить правильность настройки правил.

Для аутентификации существует 4 варианта.

4 варианта использования для аутентификации в firebase

Правила должны быть настроены по-разному для каждого параметра.

Попробуйте следующее правило:

Правило Firebase