2016-08-04 6 views
1

Amazon Mechanical Mechanical GetFileUploadURL機能を使用するためにGETリクエストを使用しようとしています。しかし、私はこのエラーコードを試してみる。AWSAccessKeyIdが承認されていません

AWS.NotAuthorized The identity contained in the request is not authorized to use this AWSAccessKeyId 

これは私がリクエストを作成するために使用しているコードです。

now = DateTime.now 

    #For creating the signature hash 
    data = "AWSMechanicalTurkRequesterGetFileUploadURL" + now.to_s 
    sha256 = OpenSSL::Digest::SHA256.new 
    sig = OpenSSL::HMAC.digest(sha256, Rails.configuration.secret_key, data) 
    signature = Base64.encode64(sig) 
    puts "https://mechanicalturk.amazonaws.com", "/?Service=AWSMechanicalTurkRequester&AWSAccessKeyId=#{Rails.configuration.aws_key}&Version=2014-08-15&Operation=GetFileUploadURL&Signature=#{sig}&Timestamp=#{now}&AssignmentId=#{mturk_results[0][:AssignmentId]}&QuestionIdentifier=file1" 

    puts "\n\n" 

    uri = URI('https://mechanicalturk.amazonaws.com') 
    params = {:Service=>"AWSMechanicalTurkRequester", :AWSAccessKeyId=>Rails.configuration.aws_key, :Version=>"2014-08-15", :Operation=>"GetFileUPloadURL", :Signature=>sig, :Timestamp=>now, :AssignmentId=>mturk_results[0][:AssignmentId], :QuestionIdentifier=>"file1"} 
    uri.query = URI.encode_www_form(params) 
    res = 0 
    Net::HTTP.start(uri.host, uri.port, 
     :use_ssl => uri.scheme == 'https') do |http| 
     request = Net::HTTP::Get.new uri 

     res = http.request request # Net::HTTPResponse object 
    end 

私が間違っていることは何ですか?

+0

なぜアマゾンから公式のRubyのSDKを使用するか、多分rturkありませんか?それにもかかわらず、MTurkは日付の書式設定に関して非常に嫌なので、私はそれが問題だと考えます。 – Thomas

+0

Ruby SDKでファイル結果を取得するための関数が見つかりませんでした。 getHITResultsからUploadedFileKeyを取得します。これには、ベースに追加するURLの一部が含まれていますが、使用できませんでした。 – ceaston7

答えて

1

タイムスタンプを正しくフォーマットする必要があります。タイムスタンプはUTCで、次のISO 8601形式である必要があります。 YYYYMMDD'T'HHMMSS'Z '。たとえば、20150830T123600Zは有効なタイムスタンプです。タイムスタンプにはミリ秒を含めないでください。

それは形式である必要が

: タイムスタンプ= 2016-04-23T08:00:05Z

RubyのDateTime.now方法の形式は、それらを返している間: 2016-08-05T10:43:27 -07:00

あなたがここにタイムスタンプとAWS署名の詳細を読むことができます: http://docs.aws.amazon.com/general/latest/gr/sigv4-date-handling.html

+1

もう1つのヒントとして、AWSコールサインの不具合を解消しながら、シンプルな方法を使いたいと思います。 GetAccountBalanceは良い候補です。その詳細はこちら:http://docs.aws.amazon.com/AWSMechTurk/latest/AWSMturkAPI/ApiReference_GetAccountBalanceOperation.html – jrb

関連する問題