我正在使用Twitter API按照文档实施OAuth: Application-only authentication 我使用Consumer key&创建了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
我得到的答案有以下错误:
“{”errors“:[{”code“:99,”label“:”authenticity_token_error“,”message“:”无法验证您的凭据“}]}”
虽然,我从我的应用设置中获取数据
答案 0 :(得分:9)
按照以下两个步骤操作。我自己做过&测试它。它工作正常,你将能够获得访问令牌
步骤1)
在您的情况下,您必须使用您的消费者密钥&更换以下两个值。秘密:
Cosumer密钥 = xvz1evFS4wEEPTGEFPHBog
消费者秘密 = L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
使用消费者密钥&消费者的秘密,我们必须生成一个64字符串。所以要做到这一点,我们必须首先连接消费者密钥和&使用冒号(:)作为分隔符的消费者秘密
所以在我的例子中,连接的字符串将是:
xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
注意:连接字符串中不应有空格
所以现在我们已经准备好了我们的串联字符串。现在我们必须生成base 64字符串。为此,我们可以使用在线服务来执行此操作。 打开此网址http://www.motobit.com/util/base64-decoder-encoder.asp并粘贴您的连接字符串&单击“转换源代码”。这将为您提供Base 64字符串。
在我的情况下,Base 64字符串是(你的情况会有所不同):
<强> xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg 强>
现在,通过使用我们的Base64字符串,我们必须生成Base 64编码字符串。所以,为此,我们可以使用在线服务。打开链接https://www.base64encode.org/并粘贴我们的Base64字符串&amp;点击“编码”。
最后,您将获得我们必须在令牌请求中使用的Base64编码字符串。 就我而言,它看起来像这样:
<强> eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw == 强>
第2步)
现在打开你的POSTMAN(这是用于测试API的谷歌浏览器的插件)&amp;执行以下步骤:(我正在附上POSTMAN请求的屏幕截图,如果您是POSTMAN的新手,请查看它)
请求必须包含值为Basic的Authorization标头。 例如:
基本eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVAaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw ==
点击SEND,&amp;您将获得访问令牌。
如果您在执行此步骤时遇到任何问题,请与我们联系。
答案 1 :(得分:4)
我收到了一条带有您请求的令牌。
重要!您必须在此之后使安全令牌无效,从不在公共资源上共享您的凭据,提供一些虚拟数据。
您的问题在第34章中的文档中有所描述;获取或撤销持有人令牌的请求无效&#34;
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
附加:可能问题是您使用的是http://...
网址,而正确的是使用https://...
链接
答案 2 :(得分:2)
此类型的格式应在您的标题中使用,而Twitter则使用OAuth 1.0
Authorization:OAuth oauth_consumer_key="{consumer-key}",oauth_token="{oauth token},oauth_signature_method="HMAC-SHA1",oauth_timestamp="1500034490",oauth_nonce="ycnFHs",oauth_version="1.0",oauth_signature="{oauth-signature}"
答案 3 :(得分:0)
我认为你们中的某些人可能无法生成Base64编码的承载令牌凭证(您在Authorization标头中使用Basic XXX传递的内容)
然后,“基本身份验证”(“授权”标签)可以为您提供帮助:
它将自动添加带有值的适当Authorization标头
参考:https://developer.twitter.com/en/docs/basics/authentication/overview/application-only