我正在尝试编写基本测试以确保我的minio安装正常工作。我编写了一个遵循他们使用presigned POST policy的示例的测试,并且效果很好,但是我似乎无法创建一个预签名PUT的有效示例。我得到403 Forbidden
的原因是:
cause="Signature does not match"
source="[objecthandlers.go:468:objectAPIHandlers.PutObjectHandler()]"
这是测试代码。我已经承诺了minio javascript API,并且正在使用磁带作为测试工具。 POST策略的类似代码也可以正常工作。
编辑:这是问题的根源的重要部分:
var minio = new Minio.Client({
endPoint: 'minioTest', // <- the problem
port: 9000,
secure: false,
accessKey: 'DONALDJTRUMP',
secretKey: 'DONALDJTRUMP'
});
test('should be able to PUT to a presigned URL', function(assert) {
const filename = 'signedtest2.txt';
return minio.presignedPutObjectAsync(bucket, filename, 60)
.then(url => {
assert.ok(url.length > 200, 'URL is non empty');
console.log(url);
return agent
.put(url)
.set('Content-Type', 'text/plain')
.attach('file', 'test/data/test.txt');
}).then(r => {
assert.ok(r.ok);
console.log(JSON.stringify(r, null, 2));
}).catch(err => {
assert.fail('got error', err);
console.log(err);
});
});
我做错了什么让我成为403 Forbidden?
最佳答案
SuperAgent,minio-js或minio服务器不喜欢在主机名(端点)中使用大写字符。 las,我使用的是docker,它会自动分配主机名,因此如果您将camelCase用作容器名,则会允许这样做,而我只是剪切并粘贴了容器名。
将此行更改为小写即可解决问题:
endPoint: 'miniotest', // <- this must be lower case
主机名是case insensitive,所以应该没有关系。.我尚未确定它是哪个组件,但是在生成或验证签名时,某些内容可能会强制小写,因此它们不匹配。
我注意到我不必将容器从camelCase移开。
关于javascript - minio预先放置 super 代理的结果为403,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42050505/