0

我开发了将照片备份到 flickr 的 android 应用程序。

我多次遇到下一个问题:在将请求令牌交换为访问令牌期间,有时我收到 401 响应(“响应代码:401,响应消息:未经授权,错误:oauth_problem=token_rejected”)而不是使用访问令牌响应。

这个问题主要发生在我的互联网连接不好时(当我起诉 3g 互联网时)。

以下是显示此行为的日志:

2015-01-07 17:12:00,603 DEBUG [oauth.OAuthInterface]-[122] Getting Request Token with parameters: www.flickr.com/services/oauth/request_token [
Parameter [name=oauth_callback, value={MY_APP_NAME}-flickr://callback], 
Parameter [name=oauth_consumer_key, value={MY_CONSUMER_KEY}], 
Parameter [name=oauth_nonce, value=154099562370628], 
Parameter [name=oauth_signature_method, value=HMAC-SHA1], 
Parameter [name=oauth_timestamp, value=1420630920], 
Parameter [name=oauth_version, value=1.0], 
Parameter [name=oauth_signature, value=oVkmG/7nOoiO0P6Dm2j4Aql4lDs=]
] 

2015-01-07 17:12:01,695 DEBUG [oauth.OAuthInterface]-[136] 
Response: {oauth_token_secret={RESULT_OAUTH_TOKEN_SECRET}, oauth_callback_confirmed=true, oauth_token={RESULT_OAUTH_TOKEN}}

之后,我在浏览器中为用户打开下一个 url: url = m.flickr.com/services/oauth/authorize?oauth_token={RESULT_OAUTH_TOKEN}&perms=write

授权后我得到下一个回调:

{MY_APP_NAME}-flickr://callback?oauth_token={RESULT_OAUTH_TOKEN}&oauth_verifier=59bbeb1cb3ffedca

使用验证器我提出下一个请求:

2015-01-07 17:12:47,043 DEBUG [flickrjandroid.REST]-[288] Send Post Input parameters [
Parameter [name=oauth_consumer_key, value={MY_CONSUMER_KEY}], 
Parameter [name=oauth_nonce, value=154146242657849], 
Parameter [name=oauth_signature_method, value=HMAC-SHA1], 
Parameter [name=oauth_timestamp, value=1420630967], 
Parameter [name=oauth_token, value={RESULT_OAUTH_TOKEN}], 
Parameter [name=oauth_verifier, value=59bbeb1cb3ffedca], 
Parameter [name=oauth_version, value=1.0], 
Parameter [name=oauth_signature, value=yZjgD6iKGxn4lzJVuZHnEaqWsHE=]] api.flickr.com:443/services/oauth/access_token

回应是:

响应代码:401,响应消息:未经授权,错误:oauth_problem=token_rejected

什么会导致token被拒绝?在获得 401 响应后,我可以尝试使用相同的验证器发出另一个请求,否则这也会返回 401 响应?

这个问题有时会发生,通常是在互联网连接不好的时候。对于授权,我使用 flickrj-android-2.1.1

4

1 回答 1

0

这些是可能拒绝令牌的一些原因:

  • 请求令牌已用于交换访问令牌。
  • 请求令牌与使用者密钥不匹配。
  • 从消费者处收到的验证码无效。
于 2015-01-15T19:53:13.397 回答