OAuth с Digg API - PullRequest
       18

OAuth с Digg API

1 голос
/ 11 марта 2010

Я пытаюсь заставить Rails хорошо играть с OAuth Digg API. Я использую камень oauth (рубиновый, а не рельсовый).

Мой код выглядит примерно так:

@consumer = OAuth::Consumer.new(API_KEY, API_SECRET,
  :scheme => :header,
  :http_method => :post,
  :oauth_callback => "http://locahost:3000",
  :request_token_url => 'http://services.digg.com/1.0/endpoint?method=oauth.getRequestToken',
  :access_token_url => 'http://services.digg.com/1.0/endpoint?method=oauth.getAccessToken',
  :authorize_url => 'http://digg.com/oauth/authorize')
  @request_token = DiggController.consumer.get_request_token({
      :oauth_callback => "http://xx.xxx.xxx.x:3000/digg/callback"
    }, {
      'Content-Type' => 'application/x-www-form-urlencoded'
    })
session[:request_token] = @request_token.token
session[:request_token_secret] = @request_token.secret
redirect_to @request_token.authorize_url

Что за книга, с точки зрения того, что дала мне документация по драгоценным камням. Однако Digg выдает ошибку «400 Bad Request», когда вызывается @ consumer.get_request_token. Я не могу понять, что я делаю неправильно. Есть идеи?


Редактировать: Код обновлен и добавлен вывод Wireshark. Моя ошибка теперь "Требуется авторизация 401".

Выход из Wireshark:

POST /1.0/endpoint?method=oauth.getRequestToken HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.3.6
Content-Type: application/x-www-form-urlencoded
Authorization: OAuth oauth_nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  oauth_callback="http%3A%2F%2Fxx.xxx.xxx.x%3A3000%2Fdigg%2Fcallback",
  oauth_signature_method="HMAC-SHA1",
  oauth_timestamp="1268687137",
  oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  oauth_signature="xxx%2Bxxxxxxxxxxxxxxx%2Fxxxxxxx%3D", oauth_version="1.0"
Content-Length: 48
Host: services.digg.com

Content-Type=application%2fx-www-form-urlencoded



HTTP/1.1 401 Authorization Required
Date: Mon, 15 Mar 2010 21:05:37 GMT
Server: Apache
X-Powered-By: PHP/5.2.9-digg8
Cache-control: private
X-RateLimit-Current: 1
X-RateLimit-Max: 1000
X-RateLimit-Reset: 3600
X-Digg-Api-Version: 1.0
Accept-Ranges: bytes
Content-Length: 111
Keep-Alive: timeout=5, max=9998
Connection: Keep-Alive
Content-Type: text/xml;charset=utf-8

<?xml version="1.0" encoding="UTF-8"?>
<error code="5001" message="Invalid
signature" timestamp="1268687137"/>

1 Ответ

1 голос
/ 11 марта 2010

Между прочим, параметр обратного вызова должен быть не localhost:3000, а скорее вашим общедоступным IP-адресом (убедитесь, что вы также открыли порт 3000 для внешних подключений на вашем компьютере и / или межсетевом экране (ах) маршрутизатора), или оставьте его на по умолчанию (внеполосный.)

Изучите содержимое создаваемого исключения OAuth::Unauthorized (или используйте сниффер, например tcpdump или Wireshark), чтобы получить дополнительные сведения об ошибке HTTP 400 (возможно, у них проблемы с некоторыми из ваших параметров .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...