我开发了将照片备份到 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