我正在尝试使用OAuth 1.0a授权我使用服务。我可以执行requestToken
和authorize
步骤,但当我拨打accessToken
网址时,我会收到 401 Unauthorized 回复,并显示以下消息:
OAuth Verification Failed: Can't exchange request token "THE_TOKEN" for access token. No such token or not authorized%
我屏蔽了凭据和网址。
请求令牌网址:https://url-to-the-service.com/oauth/requestToken
授权令牌网址:https://url-to-the-service.com/oauth/authorize
访问令牌网址:https://url-to-the-service.com/oauth/accessToken
我从服务中获得的凭据如下:
consumer_key = CONSUMER_KEY
consumer_secret = CONSUMER_SECRET
curl -v -X GET --url "https://url-to-the-service.com/oauth/requestToken?oauth_version=1.0& \
oauth_timestamp=1516721112& \
oauth_nonce=25794& \
oauth_signature_method=PLAINTEXT& \
oauth_consumer_key=CONSUMER_KEY& \
oauth_signature=CONSUMER_SECRET%26"
该服务随后回复:
oauth_callback_confirmed=true&oauth_token=THE_TOKEN&oauth_token_secret=THE_TOKEN_SECRET&xoauth_token_ttl=3600
然后我将其输入浏览器:
https://url-to-the-service.com/oauth/authorize?oauth_token=THE_TOKEN
...它会提示我登录该服务。当我在登录后按下授权按钮时,我将转发到此URL:
https://url-to-the-service.com/oauth/authorize?yes=1&oauthVerifier=123456789&oauth_token=THE_TOKEN
最后,我通过向https://url-to-the-service.com/oauth/accessToken
添加oauth_verifier
和令牌密码向oauth_signature
发出请求:
curl -v -X GET --url "https://url-to-the-service.com/oauth/accessToken?oauth_version=1.0& \
oauth_timestamp=1516730938& \
oauth_nonce=30888& \
oauth_signature_method=PLAINTEXT& \
oauth_consumer_key=CONSUMER_KEY& \
oauth_signature=CONSUMER_SECRET%26THE_TOKEN_SECRET& \
oauth_token=THE_TOKEN& \
oauth_verifier=123456789"
但服务回应:
OAuth Verification Failed: Can't exchange request token "THE_TOKEN" for access token. No such token or not authorized%
那么我错过了什么?
答案 0 :(得分:1)
根据rfc5849 3.2 Verifying Requests
服务器应该返回401(未授权)状态 收到包含无效客户端凭据的请求时的代码, 无效或过期令牌,无效签名,或无效或已使用 随机数强>
我不确定步骤1中的值xoauth_token_ttl=3600
是分钟还是秒。如果是秒,则1516721112处的第一个请求和1516730938处的访问令牌请求已过期。 (1516730938 - 1516721112 = 9826)
答案 1 :(得分:0)
看起来您在cURL请求中强制执行GET请求。尝试如下的POST请求:
public static void main(String[] args) {
String stringFromHtml = new DocumentBLL().htmlFileToString();
String stringFromHtmlReplaced = new DocumentBLL().replaceHTMLcontent(stringFromHtml );
}
请参阅OAuth1 documentation。引用此处作为参考:
令牌交换
授权的最后一步是交换临时 用于长期凭证的凭证(请求令牌)(也称为 访问令牌)。这个请求也会破坏临时性 凭证。
临时凭据将转换为长期凭据 发送POST请求到令牌请求端点(通常 /您好!OAuth1 /访问)。此请求必须由临时签名 凭据,并且必须包含来自的oauth_verifier令牌 授权步骤。