API Yelp Place возвращает ошибку неверной подписи только из Nginx на EC2

Проблема: я получаю сообщение об ошибке «Недопустимая подпись» от Yelp API только в рабочей среде (работает на сервере nginx в AWS). Когда я запускаю локально на своем локальном хосте: 3000, ошибки подписи нет, и все работает нормально.

Я использую драгоценный камень yelp в рельсах. Вот код на рубине:

$client = Yelp::Client.new({
    consumer_key: $SL_CONSUMER_KEY,
    consumer_secret: $SL_CONSUMER_SECRET,
    token: $SL_TOKEN,
    token_secret: $SL_TOKEN_SECRET
})

begin
    $client.search("Los Angeles")
rescue => error
    puts error.message
    puts error.inspect
end

error.message выводит: «Подпись недействительна»

error.inspect выводит: ‹ Yelp::Error::InvalidSignature: Подпись недействительна >

Все работает, когда я запускаю локально на сервере Rails Webrick, но когда я запускаю его в рабочей среде, я получаю сообщение об ошибке "Недопустимая подпись".

Кто-нибудь видел это? Я просмотрел некоторые соответствующие сообщения, но это кажется другим. Спасибо!


person hackstar15    schedule 24.03.2015    source источник
comment
Пожалуйста, поделитесь своим сообщением об ошибке (Неверная подпись).   -  person Jarachanthan Ratnakumar    schedule 24.03.2015
comment
@JarachanthanRatnakumar Я отредактировал сообщение выше, указав некоторые утверждения для печати и то, что я получил.   -  person hackstar15    schedule 25.03.2015


Ответы (2)


Это, вероятно, не относится к большинству людей, но на случай, если это может кому-то помочь, вот оно:

Мое «время» ушло на мой экземпляр EC2. Так, например, в ruby ​​Time.now не печатал фактическое время. (Я думаю, что это было на несколько минут или около того).

В любом случае, Yelp API требует oauth_timestamp при отправке запроса. Конечно, время моего запроса истекло, потому что время было отключено.

Как я обнаружил эту ошибку?

Я просто пропинговал URL-адрес в своем браузере с помощью oauth, token, oauth_timestamp и т. д. (еще несколько) в качестве параметров запроса. Браузер выдает ответ об ошибке в формате JSON, и в нем говорилось, что мой запрос истек. Когда вы используете клиент ruby ​​Yelp и перехватываете исключение в коде, он не выдает ответ об ошибке в терминале, поэтому найти точный корень ошибки немного сложнее.

Как я это решил:

Я повторно откалибровал время в своем экземпляре ec2, следуя инструкциям здесь: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html

Проблема решена. Мир.

person hackstar15    schedule 25.03.2015
comment
Сегодня у меня была такая же проблема, но я использовал yelp Python API. Как-то наткнулся на ваш вопрос. Тогда я понял настоящую причину. Изменил время, и это сработало как шарм!! Большое спасибо! Но я использовал изменение времени, как здесь: stackoverflow.com/a/11931955/815539 - person inblueswithu; 23.06.2016

Invalid signature ошибка в Yelp API возникает по двум причинам. Во-первых, любой из ваших четырех ключей, то есть consumer_key, consumer_secret_key, Token и Token Secret, недействителен. Во-вторых, Parameters, переданные в Yelp API, либо недействительны, либо какие-либо из них равны нулю.

person ImranNaqvi    schedule 26.10.2015