我正在使用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.
如何解决这个问题?
最佳答案
首先,您需要按照How do I create HMAC credentials for IBM Cloud Object Storage using the CLI?中的描述为服务实例生成HMAC密钥。
获得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
});
关于node.js - 如何使用NodeJS SDK for IBM Cloud Object Storage生成预签名链接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52100144/