【问题标题】:minio presigned put with superagent results in a 403minio presigned put 与 superagent 导致 403
【发布时间】:2017-02-05 09:35:05
【问题描述】:

我正在尝试编写一个基本测试来确保我的 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 禁止?

【问题讨论】:

    标签: javascript superagent minio


    【解决方案1】:

    SuperAgent、minio-js 或 minio 服务器不喜欢在主机名(endPoint)中包含大写字符。唉,我正在使用自动分配主机名的 docker,因此如果您使用 camelCase 作为容器名称,则允许这样做,而我只是剪切并粘贴了容器名称。

    将此行改为小写即可解决问题:

    endPoint: 'miniotest',     // <- this must be lower case
    

    主机名是case insensitive,所以它应该无关紧要。我还没有确定它是哪个组件,但是在生成或验证签名时可能会强制转换为小写,因此它们不匹配。

    我注意到我不必将容器从 camelCase 中移开。

    【讨论】:

      【解决方案2】:

      @paul 我们已经解决了这个问题,并且在源代码中已修复。请升级。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-26
        • 2017-02-23
        • 2020-10-05
        • 1970-01-01
        • 2019-09-19
        • 2012-04-21
        • 1970-01-01
        • 2014-07-12
        相关资源
        最近更新 更多