首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用OAuth 1.0a授权我,在请求accesToken时失败

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

Stack Overflow用户
提问于 2018-01-23 18:44:26
回答 2查看 619关注 0票数 2

我正试图授权我使用OAuth 1.0a进行服务。我可以执行requestTokenauthorize步骤,但是当我调用accessToken URL时,我会得到一个401个未经授权的响应,其中包含以下消息:

OAuth Verification Failed: Can't exchange request token "THE_TOKEN" for access token. No such token or not authorized%

我掩盖了全权证书和网址。

请求令牌URL:https://url-to-the-service.com/oauth/requestToken

授权令牌网址:https://url-to-the-service.com/oauth/authorize

访问令牌URL:https://url-to-the-service.com/oauth/accessToken

我从该服务获得的证书如下:

consumer_key = CONSUMER_KEY

consumer_secret = CONSUMER_SECRET

步骤1-请求临时令牌

代码语言:javascript
运行
复制
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-使用临时令牌授权我并获得一个验证器

然后在浏览器中输入以下内容:

代币

...and提示我登录到该服务。当我在登录后按下“授权”按钮时,我将被转发到以下URL:

代币

步骤3-请求访问令牌

最后,通过向https://url-to-the-service.com/oauth/accessToken添加oauth_verifier和令牌秘密向oauth_signature发出请求。

代码语言:javascript
运行
复制
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%

那我错过了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-02-02 13:36:37

根据rfc5849 3.2验证请求

当接收到具有无效的客户端凭据()、无效或过期的令牌无效签名无效或使用的nonce的请求时,服务器应该返回401 (未经授权)状态代码。

我不确定步骤1中的值xoauth_token_ttl=3600是分钟还是秒。如果是秒,1516721112的第一个请求和1516730938的访问令牌请求已经过期。(1516730938 - 1516721112 = 9826)

票数 1
EN

Stack Overflow用户

发布于 2018-02-01 02:42:58

看起来,您在cURL请求中强制执行GET请求。尝试下面这样的帖子请求:

代码语言:javascript
运行
复制
curl -v -X POST --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"

请参考OAuth1文档。在此引用以供参考:

令牌交换 授权的最后一步是将临时凭据(请求令牌)交换为长寿凭据(也称为访问令牌)。此请求还将销毁临时凭据。 临时凭据通过向令牌请求端点发送POST请求(通常为/oauth1/access)而转换为长寿命凭据。此请求必须由临时凭据签名,并且必须包括授权步骤中的oauth_verifier令牌。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48408731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档