2017-02-05 1 views
0

미니 오 설치가 올바르게 작동하는지 확인하기 위해 기본 테스트를 작성하려고합니다. presigned POST policy을 사용하는 예제를 따르는 테스트를 작성했는데 제대로 작동하지만 presigned PUT의 작동 예제를 만들 수 없습니다. 다음과 같은 원인으로 403 Forbidden이 발생했습니다.미니 오 디어로 putaged minio 결과가 403

cause="Signature does not match" 
source="[objecthandlers.go:468:objectAPIHandlers.PutObjectHandler()]" 

다음은 테스트 코드입니다. 미니 오 자바 스크립트 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가 금지 :이 문제의 원인이었다 중요한 부분은?

답변

2

SuperAgent, minio-js 또는 미니 오 서버는 호스트 이름 (endPoint)에 대문자가없는 것을 선호합니다. 아아 나는 호스트 이름을 자동으로 할당하는 docker를 사용하고 있으므로 컨테이너 이름에 camelCase를 사용하는 경우이를 허용하고 컨테이너 이름을 잘라 붙여 넣기 만하면됩니다. 소문자로이 줄을 변경

문제를 해결 :

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

호스트 이름입니다 case insensitive 그래서는 ...... 나는, 그것이 어떤 구성 요소를 확인하지 못했습니다 중요하지 말았어야하지만 뭔가 가능성이 소문자로 강요한다 따라서 서명을 생성하거나 유효성을 검사 할 때 일치하지 않습니다.

나는 용기를 낙타에서 바꾸지 않아도된다는 것을 유의한다.

1

@paul이 문제를 해결했으며 출처에서 수정되었습니다. 친절하게 업그레이드하십시오.