В проекте мне предоставлены конечные точки API из БД Firebase.
Для извлечения данных я аутентифицирую пользователя по электронной почте и паролю (https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-email-password), а затем подписываю каждый вызов API с помощью токена. (Эти пользователи настроены в БД Firebase)
Теперь одна из конечных точек API возвращает объекты Firebase Storage, например:
"fileReferences": [
{
"id": "",
"name": "images\/-s0m31D\/picture.jpg",
"mediaLink": "https:\/\/www.googleapis.com\/download\/storage\/v1\/b\/BUCKET.appspot.com\/o\/images%2F-s0m31D%2Fpicture.jpg?generation=1537959346600572&alt=media",
"selfLink": "https:\/\/www.googleapis.com\/storage\/v1\/b\/BUCKET.appspot.com\/o\/images%2F-s0m31D%2Fpicture.jpg",
"updated": 1537959346,
"size": 7759448
}
],
, когда я пытаюсь получить доступ к fileReferences.0.mediaLink
, я получаю ошибку аутентификации.
Если я отправлю свой токен вместе с запросом на mediaLink, мне тоже не повезет (https://cloud.google.com/storage/docs/downloading-objects#download-object-json)
Я пытался использовать PHP-клиент Google API https://github.com/googleapis/google-api-php-client,, но не знал, как настроить new Google_Client()
(у меня уже есть свой токен авторизации, и я ожидал, что он как-то будет работать)
$client = new \Google_Client();
$client->setAccessToken(['access_token' => $token]);
Как я могу получить доступ к медиа-файлам с помощью моего существующего токена аутентификации? (или мне нужен другой?)
Для обработки файлов я хотел бы использовать https://github.com/googleapis/google-api-php-client, как я могу заставить это работать? Любая подсказка приветствуется
Редактировать: Я получил некоторые результаты при отладке JavaScript SDK
«Все», что делает SDK, создает следующую схему URL
printf('https://firebasestorage.googleapis.com/v0/b/bucket.appspot.com/o/%s', urlencode('projects/-id/logo.png'));
//http[s]://firebasestorage.googleapis.com/<api-version>/b/<bucket>/o/<object-path>
Вы должны подписать вызов на https://firebasestorage.googleapis.com/v0/b/bucket.appspot.com/o/projects%2F-id%2Flogo.png с помощью своего заголовка токена Auth Bearer! [1]
Это возвращает метаданные как это:
{
"name": "projects/-id/logo.png",
"bucket": "bucket.appspot.com",
"generation": "1537960188874518",
"metageneration": "1",
"contentType": "image/png",
"timeCreated": "2018-09-26T11:09:48.874Z",
"updated": "2018-09-26T11:09:48.874Z",
"storageClass": "STANDARD",
"size": "40437",
"md5Hash": "MxkOU+6feyYtdEAgKbDgp5A==",
"contentEncoding": "identity",
"contentDisposition": "inline; filename*=utf-8''logo.png",
"crc32c": "o89Y9dQ==",
"etag": "CJae8pXE2N0CEAE=",
"downloadTokens": "32c339ff9-7e4a-42a2-890a-428f8f45d378"
}
Чтобы публично поделиться своим изображением, добавьте ? Alt = media & token = 32c339ff9-7e4a-42a2-890a-428f8f45d378
https://firebasestorage.googleapis.com/v0/b/bucket.appspot.com/o/projects%2F-id%2Flogo.png?alt=media&token=32c339ff9-7e4a-42a2-890a-428f8f45d378
Токен вам не нужен, если вы отправляете Auth Header!
Я не смог найти упоминаний о firebase или о том, как справиться с моей аутентификацией, в https://github.com/googleapis/google-api-php-client,, поэтому я понятия не имею, помогло бы это мне. Но я приступил к основам ...
Надеюсь, это кому-нибудь поможет, и любое прояснение очень ценится.
ВОПРОС для меня, чтобы лучше понять это все:
На что mediaLink
и selfLink
указывают?
[1] если доступ к хранилищу является общедоступным, подписывать его не нужно.