我正在使用Twitter API按照文档实现OAuth: 仅应用程序身份验证 我使用Consumer key&Consumer Secret创建了POST请求,如下所示:
POST http://api.twitter.com/oauth2/token
Authorization: Basic T3k2TlA4SnpCVGRiNXlFTUt2dGswamJGSTpiSlpEYm1xeExyeDJKU25JbUplcWdlQTJkREcwZXg0bUNtOUdGTGJ1TGF3TkZkNkxqNg==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=client_credentials
Run Code Online (Sandbox Code Playgroud)
我得到了一个有以下错误的回复:
"{"errors":[{"code":99,"label":"authenticity_token_error","message":"无法验证您的凭据"}]}"
虽然,我从我的应用程序设置中获取数据
sFo*_*jit 11
按照2个步骤.我自己完成并测试了它.它工作正常,你将能够获得访问令牌
步骤1)
在您的情况下,您必须使用您的消费者密钥和密码替换以下两个值:
Cosumer key = xvz1evFS4wEEPTGEFPHBog
消费者秘密 = L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
使用消费者密钥和消费者密钥,我们必须生成一个base 64字符串.所以要做到这一点,我们必须首先使用冒号(:)作为分隔符连接消费者密钥和消费者密钥
所以在我的例子中,连接的字符串将是:
xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Run Code Online (Sandbox Code Playgroud)
注意:连接字符串中不应有空格
所以现在我们已经准备好了我们的串联字符串.现在我们必须生成base 64字符串.为此,我们可以使用在线服务来执行此操作.打开这个网址http://www.motobit.com/util/base64-decoder-encoder.asp并粘贴连接字符串和点击"转换的源代码".那会给你基地64串.
在我的情况下,Base 64字符串是(你的情况会有所不同):
xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
现在,通过使用我们的Base64字符串,我们必须生成Base 64编码字符串.所以,为此,我们可以使用在线服务.打开链接https://www.base64encode.org/并粘贴我们的Base64字符串并单击"编码".
最后,您将获得我们必须在令牌请求中使用的Base64编码字符串.就我而言,它看起来像这样:
eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw ==
第2步)
现在打开你的POSTMAN(它是用于测试API的谷歌浏览器的插件)并执行以下步骤:(我正在附上POSTMAN请求的屏幕截图,如果你是POSTMAN的新手,请查看它)
请求必须包含值为Basic的Authorization标头. 例如 :
基本eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw ==
点击SEND,您将获得访问令牌.
如果您在执行此步骤时遇到任何问题,请与我们联系.
我收到了带有您请求的令牌。
重要的!之后您必须使安全令牌无效,永远不要在公共资源上共享您的凭据,提供一些虚拟数据。
您的问题在“获取或撤销不记名令牌的无效请求”一章的文档中有所描述
的grant_type=client_credentials不是首部,但是请求的主体:
curl --request POST \
--url https://api.twitter.com/oauth2/token \
--header 'authorization: Basic T3k2TlA4SnpCVGRiNXlFTUt2dGswamJGSTpiSlpEYm1xeExyeDJKU25JbUplcWdlQTJkREcwZXg0bUNtOUdGTGJ1TGF3TkZkNkxqNg==' \
--header 'content-type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials
Run Code Online (Sandbox Code Playgroud)
另外:也许问题在于您使用的是http://...URL,而正确的是使用https://...链接