无法授权我使用OAuth 1.0a,在请求accessToken时失败

时间:2018-01-23 18:44:27

标签: oauth oauth-1.0a

我正在尝试使用OAuth 1.0a授权我使用服务。我可以执行requestTokenauthorize步骤,但当我拨打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

第1步 - 请求临时令牌

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

第2步 - 使用临时令牌授权我并获取验证者

然后我将其输入浏览器:

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

第3步 - 请求访问令牌

最后,我通过向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%

那么我错过了什么?

2 个答案:

答案 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令牌   授权步骤。