2

withingsapiで認証しようとしています。コンシューマーキーとシークレットを正しく取得し、アプリページにアクセスできます。また、APIを使用して認証することもできます。

問題は、それが戻ってこないことです。代わりに、404エラーが表示されます:ページが見つかりません。コールバックURLを何度もクロスチェックしました。

これがURLです。

これは私が認証しようとしているコードです:DocumentationGem1Gem2

ユーザーを自分のアプリケーションに戻したい。

@callback_url = 'http://127.0.0.1:3000/auth/withings/callback'
    @consumer = OAuth::Consumer.new(WITHINGS_KEY, WITHINGS_SECRET, {
        :site => 'https://oauth.withings.com',
        :request_token_path => '/account/request_token',
        :access_token_path => '/account/access_token',
        :authorize_path => '/account/authorize'
    })
    @request_token = @consumer.get_request_token(:oauth_callback => @callback_url)
    session[:request_token] = @request_token
    redirect_to @request_token.authorize_url(:oauth_callback => @callback_url)
4

2 に答える 2

2

良い。サードパーティのライブラリを使用しないでください。

@request_token.authorize_url(:oauth_callback => @callback_url)

間違った URL を返します。

OAuth の独自の実装を作成してみてください。

1) 文字列に HMAC-SHA1 アルゴリズムを使用します。

GET&https%3A%2F%2Foauth.withings.com%2Faccount%2Frequest_token&oauth_callback%3Dhttp%3A%2F%2F127.0.0.1%3A3000%2Fauth%2Fwithings%2Fcallback%26oauth_consumer_key%3D{WITHINGS KEY}%26oauth_nonce%3D{RANDOM STRING}%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D{CURRENT TIME}%26oauth_version%3D1.0

この文字列には 3 つの部分が含まれます: {METHOD} + "&" + {ENCODED REQUEST URL} + "&" + {ENCODED REQUEST QUERY PART}

署名用の秘密鍵: {WITHINGS SECRET}+"&"

結果として、この記号をエンコードします。

2) 次の URL にリクエストを送信します。

https://oauth.withings.com/account/request_token?oauth_callback=http%3A%2F%2F127.0.0.1%3A3000%2Fauth%2Fwithings%2Fcallback&oauth_consumer_key={WITHINGS KEY}&oauth_nonce={NONCE FROM STEP 1}&oauth_signature={RESULT OF STEP 1}&oauth_signature_method=HMAC-SHA1&oauth_timestamp={TIMESTAMP FROM STEP 1}&oauth_version=1.0

3) 応答本文を解析します。OAUTH TOKEN と OAUTH SECRET を取得します。

4) 文字列に HMAC-SHA1 アルゴリズムを使用します。

GET&https%3A%2F%2Foauth.withings.com%2Faccount%2Fauthorize&oauth_callback%3Dhttp%3A%2F%2F127.0.0.1%3A3000%2Fauth%2Fwithings%2Fcallback%26oauth_consumer_key%3D{SECRET KEY}%26oauth_nonce%3D{RANDOM STRING}%26oauth_signature_method%3DHMAC-SHA1%26oauth_token%3D{OAUTH TOKEN}%26oauth_timestamp%3D{CURRENT TIME}%26oauth_version%3D1.0

署名用の秘密鍵: {WITHINGS SECRET}+"&" + {OAUTH SECRET}

結果として、この記号をエンコードします。

5) ユーザーを次の URL にリダイレクトします。

https://oauth.withings.com/account/rauthorize?oauth_callback=http%3A%2F%2F127.0.0.1%3A3000%2Fauth%2Fwithings%2Fcallback&oauth_consumer_key={WITHINGS KEY}&oauth_nonce={NONCE FROM STEP 4}&oauth_signature={RESULT OF STEP 4}&oauth_signature_method=HMAC-SHA1&oauth_token={OAUTH TOKEN}&oauth_timestamp={TIMESTAMP FROM STEP 4}&oauth_version=1.0
于 2013-03-04T20:04:03.987 に答える
0

リンクの例には、oauth_consumer_key、oauth_signature、およびその他の oauth フィールドがありません。

于 2013-03-03T11:04:44.477 に答える