2013-02-28 94 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