我正在使用DotNetOpenAuth 4.3将FitBit集成到我的Web应用程序中。几天前,当我尝试使用访问令牌交换请求令牌时,我开始从FitBit收到以下错误时,我能够成功授权用户:
{“errors”:[{“errorType”:“oauth”,“fieldName”:“oauth_access_token”,“message”:“无效的签名或令牌'PpUuhUBgLXZrLvKQoaS + Tt4Blc4 ='或令牌'4c5623004d03e71094b7a7f0d2ded338'”}], “成功”:假}
我已经四处搜索,发现这个帖子我认为与我遇到的问题相符: https://groups.google.com/forum/#!msg/fitbit-api/ii4pUt4uTNM/mPORlYWqs0wJ
该主题的要点是FitBit最近开始强制执行oauth_signature参数,并使用以下内容进行签名:
https://api.fitbit.com/oauth/access_token的请求需要使用应用程序的使用者密钥和密码以及从授权回调中收到的oauth_token和oauth_verifier 进行签名。
换句话说,看起来我们需要用4个参数进行签名。我查看了DotNetOpenAuth的源代码,并在OAuth1HmacSha1HttpMessageHandler类上看到了以下方法(我在ServiceProviderDescription中使用了HmacSha1SigningBindingElement):
protected override byte[] Sign(byte[] signedPayload) {
using (var algorithm = HMACSHA1.Create()) {
algorithm.Key = Encoding.ASCII.GetBytes(this.GetConsumerAndTokenSecretString());
return algorithm.ComputeHash(signedPayload);
}
}
看起来这个签名行为只使用了两个参数:consumer和token secret(通过this.GetConsumerAndTokenSecretString()返回)。
我的问题是:
是否正在更改消息处理程序的类型并覆盖Sign方法的行为以解决此问题的正确方法?如果是这样,有没有办法改变我的WebConsumer的签名行为?我想我可以创建OAuth1HttpMessageHandlerBase的子类并覆盖此行为,但似乎没有一种干净的方法来更改我的Web使用者的MessageHandler。
谢谢!