Как аутентифицировать вызов отдыха в 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]()