如何使用NodeJS SDK for IBM Cloud Object Storage生成预签名链接?

时间:2018-08-30 15:00:59

标签: node.js security amazon-s3 ibm-cloud object-storage

我正在使用IBM Cloud Object Storage及其NodeJS SDK(https://github.com/IBM/ibm-cos-sdk-js)。

我想生成预签名的链接,以便用户无需身份验证即可访问存储桶中的内容。

致电cos.getSignedUrl('getObject', ...)时收到错误消息UnsupportedSigner: Presigning only supports S3 or SigV4 signing.

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

首先,您需要为服务实例生成HMAC密钥,如How do I create HMAC credentials for IBM Cloud Object Storage using the CLI?

中所述

拥有HMAC访问密钥和秘密访问密钥后,请按以下方式更改COS SDK的初始化:

const config = {
  endpoint: 'cos endpoint',
  apiKeyId: 'cos api key',
  ibmAuthEndpoint: 'https://iam.ng.bluemix.net/oidc/token',
  serviceInstanceId: 'cos crn'
  // these two are required to generate presigned URLs
  credentials: new COS.Credentials('<access key>', '<secret_access_key>', sessionToken = null),
  signatureVersion: 'v4'
};
const cos = new COS.S3(config);

然后您可以使用以下方法生成预签名链接:

const url = await cos.getSignedUrl('getObject', {
  Bucket: '<your-bucket-name>',
  Key: '<your-key-name>',
  Expires: 60 * 5, // 5 minutes
});