Временный общедоступный URL-адрес для службы хранения объектов IBM Bluemix с NodeJS

#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

ССЫЛКА: https://new-console.ng.bluemix.net/docs/services/ObjectStorage/objectstorge_usingobjectstorage.html#using-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, эта библиотека, например, будет полезна.