我正在尝试编写基本测试以确保我的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/

10-10 22:01