简而言之,我们不希望我们的客户每次登录网站时都要进行身份验证,并希望在我们的网站上同步他们的Fitbit数据。
我们希望他们进行一次身份验证,然后保存令牌并使用它来自动同步数据。我似乎无法获得工作授权。我正在使用.Net。
这是我的代码,但不断获得401 - 未经授权
string consumerKey = "KEY";
string authToken = "TOKEN";
string secrectKey = "SECRET";
string baseUrl = "http://api.fitbit.com/1/user/-/profile.xml";
string auth_nonce = DateTime.Now.Ticks.ToString();
string timestamp = ( ( Int32 )( DateTime.UtcNow.Subtract( new DateTime( 1970, 1, 1 ) ) ).TotalSeconds ).ToString();
string signingKey = string.Empty;
string authSignature = string.Empty;
string parameters = "oauth_consumer_key=" + consumerKey + "&oauth_nonce=" + auth_nonce + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + timestamp + "&oauth_token=" + authToken + "&oauth_version=1.0";
//1. percent encode
parameters = HttpUtility.UrlEncode( parameters );
//encode baseURL
baseUrl = HttpUtility.UrlEncode( baseUrl );
//add POST
//signature base string
parameters = "GET&" + baseUrl + "&" + parameters;
//signing key
signingKey = secrectKey + "&" + authToken;
//generate key
//base64 signature srting
authSignature = Convert.ToBase64String( Generate( signingKey, parameters ) );
//url for request
WebRequest g = HttpWebRequest.Create( "http://api.fitbit.com/1/user/-/profile.xml" );
//add headers
g.Headers.Add( HttpRequestHeader.Authorization, "OAuth realm=\"api.fitbit.com\" oauth_token=\"" + authToken + "\", oauth_consumer_key=\"" + consumerKey + "\", oauth_nonce=\"" + auth_nonce + "\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"" + timestamp + "\", oauth_version=\"1.0\", oauth_signature=\"" + authSignature.Replace( "=", "%3D" ) + "\"" );
//get response from server
var response = g.GetResponse();
是否有人拥有示例代码或可以查看问题所在?
亲切的问候
答案 0 :(得分:2)
我为我们办公室的内部fitbit联盟写了类似的东西
代码在github NewOrbit Fitbit League
上它使用Azure表存储作为后备存储以保留令牌,但您应该能够根据需要进行更改,它还支持使用Move应用程序的用户
[编辑] 我还使用Fitbit.net作为客户端库