#swift #ibm-cloud #openstack #object-storage
#swift #ibm-cloud #openstack #объект-хранилище
Вопрос:
Пример использования: файл, загруженный в хранилище объектов IBM. Теперь требуется предоставить временный доступ через подписанный URL-адрес, срок действия которого истекает после определенной задержки.
Официально поддерживается только SWIFT, требуется обходной путь, который работает с JAVASCRIPT -> NodeJS.
Комментарии:
1. У вас есть какое-либо решение для этого? Я застрял в этой проблеме. Любая помощь приветствуется.
Ответ №1:
Вам необходимо установить SWIFT CLI и установить временный ключ для ваших учетных данных.
Этот шаг очень важен и МОЖЕТ БЫТЬ ВЫПОЛНЕН ТОЛЬКО С ПОМОЩЬЮ SWIFT CLI, поскольку в настоящее время есть способ сделать это с помощью Bluemix Console.
ШАГ 0 — ************ ОБЯЗАТЕЛЬНЫЙ ************* УСТАНОВИТЕ SWIFT CLI
ШАГ 1 — ************ ОБЯЗАТЕЛЬНЫЙ ************* Сгенерируйте секретный ключ, чем длиннее, тем лучше.
$ swift post -m «Temp-URL-Key: 2d2a3e9f12e87b1_SOMEKEY_2d2a3e9f12e87b1»
*** Вы можете получить его в любое время, введя статистику bash —> $ swift
ШАГ 2 — ************ НЕОБЯЗАТЕЛЬНО ************* Установить пакет dotenv $ npm install —сохранить dotenv
ШАГ 3 — ************ НЕОБЯЗАТЕЛЬНО ************* Создайте env-файл $ touch .env
ШАГ 4 — ************ НЕОБЯЗАТЕЛЬНО ************* Отредактируйте env-файл, введите эти значения и сохраните файл.
(ссылка -> согласно ШАГУ 1)
META_TEMP_URL_KEY=b463af8f_SOMEVALUEKEY_b463af8fb463af8f
(ссылка -> Идентификатор проекта, указанный в консоли Bluemix)
PROJECTID=50e8a0e8SOMEVALUEKEYbb463af8f
require('dotenv').config();
var crypto = require('crypto');
var META_TEMP_URL_KEY = process.env.META_TEMP_URL_KEY; // See Step 1
var baseUrl = 'https://dal.objectstorage.open.softlayer.com'; // Since my bucket is in DALLAS I am having this URL
var HTTPMethod = 'GET'; // Always GET - As the file has been already uploaded.
var containerName = 'expenses'; // Container Name as per in the Bluemix console - Ex: expenses
var objectName = 'report.pdf'; // The object filename - Ex: report.pdf
var seconds = 60; // Delay of the temporary URL to be valid.
var tempURL = getTempURL(baseUrl, HTTPMethod, containerName, objectName, seconds);
console.log(tempURL); // It should return in this case something like this:
// https://dal.objectstorage.open.softlayer.com/v1/AUTH_X0X0X0X0XX0X0XX0X0X/expenses/report.pdf?temp_url_sig=Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0amp;temp_url_expires=1476243544
function getTempURL(baseUrl, HTTPMethod, metaTempURLKey, projectID, containerName, objectName, seconds) {
var expires = Math.floor(Date.now() / 1000) seconds;
var url = containerName '/' objectName;
var method = HTTPMethod;
var key = key;
var objectPath = '/v1/AUTH_' process.env.PROJECTID '/' url;
var hmacBody = method 'n' expires 'n' objectPath;
var sig = crypto.createHmac('sha1', key).update(hmacBody).digest('hex');
var tempURL = baseUrl objectPath '?temp_url_sig=' sig 'amp;temp_url_expires=' expires;
return tempURL;
}
Комментарии:
1. Ну, «может быть сделано только»… на самом деле нет, вероятно, не через консоль Bluemix, но вы можете просто запросто запрограммировать его самостоятельно на любом языке, следуя этому , например, на javascript, для которого также есть библиотеки / фрагменты кода, доступные в github.
Ответ №2:
Когда у вас есть необходимые ключи (ключ приложения, секретный ключ приложения, потребительский ключ), вы можете сделать это «в автономном режиме» (то есть не как запрос к соответствующему API swift openstack), закодировав его самостоятельно или используя для этого библиотеку. Поскольку вы ищете что-то, что можно использовать в JS / Node, эта библиотека, например, будет полезна.