편집 2 : 제출 한 awskeyid를 삭제했습니다. 이제 s3이 x-amz-signature 필드를 허용하지만 이제는 다음과 같은 오류가 나타납니다 : 우리가 계산 한 요청 서명이 일치하지 않습니다. 당신이 제공 한 서명. 귀하의 키와 서명 방법을 확인하십시오.v3을 사용하여 s3에 업로드 양식 파일을 만듭니다.
그래서 나는 잘못된 서명, 잘못된 아이디어를 계산합니다.
편집 : 내가 찾은 documnation에 따라 코드를 편집했는데 서명의 정확성을 계산하는 것 같지만 여전히 "signature"라는 필드에 양식을 넣을 때 작동하지 않습니다. 다시이 메커니즘은 isoorted 및 새 하나를 사용해야하지만 x-amz 서명 시그니처 필드의 이름을 변경할 경우 "시그니처"라는 필드가 없다는 오류가 다시
나는 브라우저에서 amazon s3으로 직접 파일을 업로드하는 작업 양식으로, 이전 버젼의 정책 서명을 지원하는 프랑크푸르트 지역으로 버킷을 전환했습니다.
은 그래서 난 내 양식과 만든 정책을 편집 할 triued하지만 뉴 운 어떤 도움이 내 정책을 이해할 수있을 것이다 :
$policy = json_encode(array(
'expiration' => date('Y-m-d\TG:i:s\Z', strtotime('+6 hours')),
'conditions' => array(
array(
'bucket' => $data['bucket']
),
array(
'acl' => 'private'
),
array(
'starts-with',
'$key',
'Zips/Uploads'
),
array(
'content-length-range', 0, 500000000
),
array(
"x-amz-algorithm"=> "AWS4-HMAC-SHA256"
),
array (
"x-amz-credential"=> AMAZON_KEY."/20160111/eu-central-1/s3/aws4_request"
),
array(
"x-amz-date"=> "20151101T000000Z"
),
)
));
$data['base64Policy'] = base64_encode($policy);
$signing_key1 = hash_hmac('sha256', "AWS4" .AMAZON_SECRET_KEY , "20151101", true);
$signing_key2 = hash_hmac('sha256', $signing_key1, AMAZON_REGION,true);
$signing_key3 = hash_hmac('sha256', $signing_key2, "s3",true);
$signing_key4 = hash_hmac('sha256', $signing_key3, "aws4_request",true);x
$data['signature'] = base64_encode(hash_hmac('sha256',$signing_key4, $data['base64Policy'],true));
이이 난 모양이다
: 아마존에서 오류를 가져 오는이 양식 메신저를 사용<form class="startfileupload" action="//s3.eu-central-1.amazonaws.com/<?php echo $bucket; ?>/" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="${filename}" /><br />
<input type="hidden" name="acl" value="private" />
<input type="hidden" name="X-amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="hidden" name="X-Amz-Credential" value="<?php echo $accesskey; ?>/20160111/eu-central-1/s3/aws4_request" />
<input type="hidden" name="X-Amz-Date" value="20151101T000000Z" />
<input type="hidden" name="policy" value="<?php echo $base64Policy; ?>">
<input type="hidden" name="X-Amz-Signature" value="<?php echo $signature; ?>">
<input type="file" name="file" /> <br />
사용3210
InvalidRequest
제공 한 인증 메커니즘이 지원되지 않습니다. AWS4-HMAC-SHA256을 사용하십시오.
무엇이 잘못 되었나요? 나는 문서 작성 및 예제를 작성하려고했지만 실제로는 그렇지가 않았다.
xx!
S3 :
선택적으로것은 또한이를 추가 유용 할 수 있습니다를 Signature v2에서 Signature v4로 조금 이동 했으므로 요청을 서명하는 코드를 업데이트해야합니다. 공식 SDK를 사용하고 있습니까? 그들은 당신을 위해이 모든 것을 처리합니다. –
이 질문은 V2 용으로 작성된 코드 스 니펫에 관한 것이므로 주제가 아닌 것 같습니다. 이는 'POST'업로드의 V4 인증에 대한 문서화 된 요구 사항을 충족시키기 위해 상당한 재 작성이 필요합니다. http://docs.aws. 아마존.com/AmazonS3/latest/API/sigv4-authentication-HTTPPOST.html –
aws에 대한 공식 및 laravel sdk를 모두 받았지만 문서를 읽었지만 내 정책을 만드는 방법을 이해하는 것이 매우 어려웠습니다. –