2013-02-28 128 views
2

我想用withings api進行身份驗證。我已經正確地獲得了消費者密鑰和密碼,並且能夠進入應用程序頁面,並且我也可以使用api進行身份驗證。Withings api身份驗證

問題是它不回來,而是顯示404錯誤:找不到頁面。 我已經多次檢查了回調網址。

這是url

這是我想驗證的代碼:Documentation,Gem1,Gem2

我想讓用戶回到我的應用程序。

@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) 

回答

2

好吧。我認爲,你不應該使用第三方庫,因爲

@request_token.authorize_url(:oauth_callback => @callback_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個部分: {方法} + 「&」 + {編碼的請求URL} + 「&」 + {編碼的請求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 
0

示例鏈接中缺少oauth_consumer_key,oauth_signature和其他oauth字段。

+0

WITHINGS_KEY和WITHINGS_SECRET是消費者鍵和消費者的祕密。 Withings沒有給出任何oauth_signature,它給了ony消費者的鑰匙和祕密 – 2013-03-04 07:15:59

+0

是的。但請看文檔中的示例請求。請求必須包含下一字段: oauth_callback(編碼重定向URL), oauth_consumer_key(WITHINGS_KEY), oauth_nonce(隨機字符串), oauth_signature(要求籤名與消費者的祕密), oauth_signature_method(簽名方法(HMAC-SHA1)), oauth_timestamp(當前時間), oauth_token(從https://oauth.withings.com/account/request_token收到的請求令牌), oauth_version(1.0)。 – Aries 2013-03-04 19:26:45

+0

是爲了獲得響應而需要成爲現場的call_back?我得到一個錯誤500,並想知道我現在是否需要一個活網站。 – Erik 2014-07-08 18:17:25