2013-05-01 3 views
1

이 질문에 대한 약간의 유사성을 지닌 stackoverflow에 대해 많은 질문이 있지만 아주 좋아할 것은 없습니다.Amazon AWS 간단한 서적 쿼리. 델파이에서 어떻게 서명합니까?

AWS를 쿼리하고 XML 데이터를 다시 보내는 응용 프로그램이 있습니다. 나는 그것을 monitoried하고는이 같은 문자열을 보냅니다. 00 : 당신이 그것을 시도하는 경우

http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=AKIAID6DSLQQRYN3MDQA&AssociateTag=wwwratterriec-20&Keywords=031238792X&Operation=ItemSearch&SearchIndex=Books&Service=AWSECommerceService&SignatureMethod=HmacSHA1&SignatureVersion=2&Timestamp=2013-04-30T22%3A00%3A00.000Z&Version=2011-08-01&Signature=n1x%2BtbR71WFAgPHYq4rrpamgMb4%3D

, 당신을 알려줍니다 일부 XML을 얻을 것 "을 요청이 만료 된 타임 스탬프 날짜는 2013-04-30T22입니다 : 00.000Z "등

"ToBeSigned "가 일치하지 않으면"계산 한 요청 서명이 사용자가 제공 한 서명과 일치하지 않습니다. "라는 메시지가 나타납니다.

제 문제는 올바른 "서명"을 생성하는 "ToBeSigned"버전을 얻을 수 없다는 것입니다. 설명서가 혼란 스럽습니다. 아마도 Java 또는 PHP에 맞춰 졌기 때문일 것입니다.

위의 링크에서 올바른 "ToBeSigned"는 무엇입니까? 델피 의사 코드로주세요!

+0

저는 서명이 ** Timestamp ** 매개 변수와 관련이 있다고 생각합니다. – ComputerSaysNo

+0

예, 여기에 모두 "설명 됨"입니다 : – user1355041

+0

예, 당신은 틀림 없습니다. 여기에 모두 설명되어 있습니다. http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html 그러나 코드를 작성할 때 제대로 작동하지 않습니다. 누군가 코드 스 니펫을 제공 할 정도로 친절 할 수 있는지 궁금합니다. 나는 온통 인터넷 검색하고 델파이 – user1355041

답변

2

다음은 저에게 효과가있는 델파이 코드입니다. 단순히 목적에 맞게 매개 변수의 값을 변경하고 자신의 비밀 키를 입력하십시오. 지금 TimeStamp를 2.4 시간 더 추가했습니다 - 자신의 목적에 맞게 변경하십시오.

procedure TForm1.ButtonWorksClick(Sender: TObject); 
var 
    toHash, SecretAccessKey, dirstr, awssignature, sg, ts, link: String; 
    sig: T160BitDigest; 
    SystemTime1: SYSTEMTIME; 
    dt1: TDateTime; 
begin 
    GetSystemTime(SystemTime1); 
    dt1 := SystemTimeToDateTime(SystemTime1) + 0.1; 
    ts := '&Timestamp=' + HTTPEncode(FormatDateTime('yyyy"-"mm"-"dd"T"hh":00:00.000Z', dt1)); 

    tohash := 'GET' + Chr(10) + 'ecs.amazonaws.com' + Chr(10) + '/onca/xml' + Chr(10) + 
    'AWSAccessKeyId=AKIAID6DSLQQRYN3MDQA&AssociateTag=locboo01-20&Keywords=031238792X&Operation=ItemSearch&SearchIndex=Books' + 
    '&Service=AWSECommerceService&SignatureMethod=HmacSHA1&SignatureVersion=2' + ts + '&Version=2011-08-01'; 

    SecretAccessKey := 'Your secret key here'; 

    Sig := cHash.CalcHMAC_SHA1(SecretAccessKey, tohash); 
    dirstr := cHash.SHA1DigestAsString(Sig); 
    awssignature := EncdDecd.EncodeString(dirstr); 

    sg := HTTPApp.HTTPEncode(awssignature); 
    link := 'http://ecs.amazonaws.com/onca/xml' + '?' + 
    'AWSAccessKeyId=AKIAID6DSLQQRYN3MDQA&AssociateTag=locboo01-20&Keywords=031238792X&Operation=ItemSearch&SearchIndex=Books' + 
    '&Service=AWSECommerceService&SignatureMethod=HmacSHA1&SignatureVersion=2' + ts + '&Version=2011-08-01' + '&Signature=' + sg; 
    Clipboard.AsText := link; 

    Memo1.Lines.Add(sg); 
end; 
+0

어떤 라이브러리를 사용하고 있습니까? 내 델파이 T160BitDigest, HTTPEncode, cHash 및 HTTPApp @ user1355041을 찾을 수 없습니다. –