2

ユース・ケース: IBM Object Storage にアップロードされたファイル。ここで、一定の遅延後に有効期限が切れる署名付き URL を介して一時的なアクセスを提供したいと考えています。

正式にサポートされているのは SWIFT のみです。JAVASCRIPT -> NodeJs で動作する回避策が必要です。

4

2 に答える 2

1

SWIFT CLI をインストールし、資格情報の一時キーを設定する必要があります。

このステップは非常に重要であり、現在 Bluemix コンソールでそれを行う方法があるため、SWIFT CLI を使用してのみ行うことができます。

ステップ 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 stat


ステップ 2 - ************ オプション ************* dotenv パッケージのインストール $ npm install --save dotenv

ステップ 3 - ************ オプション ************* .env ファイルの作成 $ touch .env

ステップ 4 - ************ オプション ************* .env ファイルを編集し、それらの値を入力してファイルを保存します。

(参照 --> STEP 1 のとおり)

META_TEMP_URL_KEY=b463af8f_SOMEVALUEKEY_b463af8fb463af8f

(参照 --> Bluemix コンソールによって提供されるプロジェクト ID)

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=Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z0&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 + '&temp_url_expires=' + expires;

    return tempURL;
}
于 2016-10-12T04:57:07.453 に答える